【问题标题】:Programmatically grab a changing textField in an UIAlertController以编程方式在 UIAlertController 中获取不断变化的文本字段
【发布时间】:2016-12-17 03:05:59
【问题描述】:

一般来说,要在每次更改 UITextField 时获取其文本,只需从 Storyboard 文件中拖动一个 IBOutlet,然后选择“编辑已更改”选项即可。

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

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

我需要什么:

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

如果输入是“猫” 需要的输出必须是:

"c"

“卡”

“猫”

我将如何实现这一目标?

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

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

在同一个文件中使用这个函数:

func textFieldDidChange(txtField: UITextField)

但我不断收到此错误: “我的视图控制器的名称”类型的值没有成员“textFieldDidChange”

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

【问题讨论】:

  • 那是因为你不是通过设置委托来要求当前班级完成这项工作。

标签: ios swift uitextfield uialertcontroller


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多