以编程方式在UIAlertController中获取更改的textField

时间:2016-12-17 03:05:59

标签: ios swift uitextfield uialertcontroller

通常,要在每次更改时抓取UITextField的文本,只需从Storyboard文件中拖出一个IBOutlet,然后选择"编辑已更改"选项。

但是,我想在UIAlertController中获取UITextField的文本,因此文本字段是以编程方式创建的,而不是通过故事板创建的。

如何以编程方式创建每次文本字段(在“警报”窗口中)更改时运行的函数?

我需要什么:

func textHasChanged(textField: TextField) {
    print(textField.text)
}

如果输入是" cat" 需要的输出需要是:

" C"

" CA"

"猫"

我将如何实现这一目标?

注意:我尝试过.addtarget方法:

textField.addTarget(self, action: Selector(self.textFieldDidChange(_:)), for: UIControlEvents.editingChanged)

将此函数放在同一个文件中:

func textFieldDidChange(txtField: UITextField)

但我一直收到这个错误: 类型的值"我的viewcontroller的名称"没有会员" textFieldDidChange"

我已经查到了这个问题,但大多数都给了我过时的答案。谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

@IBAction func displayAlert(_ sender : AnyObject) {
    let alertController = UIAlertController(title: "Enter some text", message: "Please enter some text in the field below", preferredStyle: .alert)
    alertController.addTextField()
    alertController.addAction(UIAlertAction(title: "OK", style: .default) { action in
        print("User pressed OK")
    })
    alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel) { action in
        print("User pressed Cancel")
    })


    if let textField = alertController.textFields?.first {
        textField.addTarget(self, action: #selector(ViewController.textHasChanged), for: .editingChanged)
    }
    self.present(alertController, animated: true)
}