我希望用户按下一个按钮,然后让他们能够看到一个警报,在那里他们可以输入(为服务设定价格)。另一种逻辑是将数据保存到数据库中,这与我的问题并不相关。
我使用以下示例:
https://stackoverflow.com/a/30139623/2411290
它确实有效,因为它正确地显示了警报,但是一旦我包括

print("Amount: \(self.tField.text)")

无法识别“self.tField.text”。我得到的具体错误是:
“testVC”类型的值没有成员“tField”
@IBAction func setAmount(_ sender: Any) {

    var tField: UITextField!


    func configurationTextField(textField: UITextField!)
    {
        print("generating textField")
        textField.placeholder = "Enter amount"
        tField = textField

    }

    func handleCancel(alertView: UIAlertAction!)
    {
        print("Cancelled")
    }

    let alert = UIAlertController(title: "Set price of service", message: "", preferredStyle: .alert)

    alert.addTextField(configurationHandler: configurationTextField)
    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler:handleCancel))
    alert.addAction(UIAlertAction(title: "Done", style: .default, handler:{ (UIAlertAction) in
        print("Done !!")

    }))
    self.present(alert, animated: true, completion: {
        print("completion block")
        print("Amount: \(self.tField.text)") // Error here


    })

    //// other logic for app
}

最佳答案

tFieldsetAmount函数中的局部变量。它不是类的属性。
更改:

self.tField.text

致:
tField.text

这将允许您访问局部变量。
但真正的问题是,为什么要在这个函数中创建一个UITextField的局部变量?当文本字段在任何地方都不使用时,为什么要打印它的文本?
很可能您应该访问“完成”按钮的操作处理程序内的警报文本字段。在显示警报的完成块内不需要执行任何操作。
@IBAction func setAmount(_ sender: Any) {
    let alert = UIAlertController(title: "Set price of service", message: "", preferredStyle: .alert)

    alert.addTextField(configurationHandler: { (textField) in
        print("generating textField")
        textField.placeholder = "Enter amount"
    })

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel) { (action) in
        print("Cancelled")
    })

    alert.addAction(UIAlertAction(title: "Done", style: .default) { (action) in
        print("Done !!")
        if let textField = alert.textFields?.first {
            print("Amount: \(textField.text)")
        }
    })

    self.present(alert, animated: true, completion: nil)
}

07-25 23:02