好了,我查阅了很多有关UIAlertController的工作方式的文档,并且我有一个非常独特的场景。我的应用程序旨在与HID蓝牙扫描仪配合使用。当我使用时:
preferredStyle: UIAlertControllerStyle.Alert
生成警报后,表明我扫描的项目不正确。很酷,警报正在发生,问题是如果我再次扫描(模拟键盘输入),正在将返回键发送到警报,并且警报正在运行dismiss操作。
如果我使用:
preferredStyle: UIAlertControllerStyle.ActionSheet
然后,警报将停留在应有的位置,而忽略警报窗口,而警报窗口正是我想要的样子。
所以我的问题是,如何捕获返回键并防止警报调用dismiss操作?我有点新手,我感觉答案很简单,但是我尝试了六种不起作用的方法。
如果有一个设置可以阻止所有用户输入到警报窗口或任何解决方案,那么我将支持任何方法。我只是不使用ActionSheet,而是更喜欢使用iOS警报而不是创建自己的屏幕。如果无法做到这一点,我确定可以构建自己的“警报”窗口。
我从一个简单的Alerts类中调用的代码。
import UIKit
class Alerts {
var controller: UIViewController
var message: String
var title: String
init?(title: String, message: String, controller: UIViewController){
if title.isEmpty || message.isEmpty {
return nil
}
self.title = title
self.message = message
self.controller = controller
}
func save_alert(input_field:UITextField, callable: (Bool)->Void ){
let action = UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default) {
UIAlertAction in
callable(false)
input_field.enabled = true
input_field.becomeFirstResponder()
print("DISMISS CALLED")
}
let alert = UIAlertController(title: self.title,message:self.message,preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(action)
self.controller.presentViewController(alert,animated:true, completion: nil)
}
}
最佳答案
尝试这样的事情。
func save_alert(input_field:UITextField, callable: (Bool)->Void ){
let action = UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default) {
UIAlertAction in
callable(false)
input_field.enabled = true
input_field.becomeFirstResponder()
print("DISMISS CALLED")
showAlert()
}
showAlert()
}
func showAlert() {
let alert = UIAlertController(title: self.title,message:self.message,preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(action)
self.controller.presentViewController(alert,animated:true, completion: nil)
}
关于ios - Swift UIAlertController禁用不带UITextField的返回键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40110051/