好了,我查阅了很多有关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/

10-10 10:57