Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:未识别UITextField_Ios_Swift_Uitextfield - Fatal编程技术网

Ios Swift:未识别UITextField

Ios Swift:未识别UITextField,ios,swift,uitextfield,Ios,Swift,Uitextfield,我希望用户按下一个按钮,然后让他们能够看到一个警报,在那里他们可以输入一个输入(设置服务的价格)。另一个逻辑涉及到将数据保存到数据库,这与我的问题并不相关 我使用以下示例: 它确实有效,因为它正确地显示了警报,但一旦我包括 print("Amount: \(self.tField.text)") 无法识别“self.tField.text”。我得到的具体错误是: 类型为“testVC”的值没有成员“tField” t字段是setAmount函数中的局部变量。它不是类的属性 更改: self.

我希望用户按下一个按钮,然后让他们能够看到一个警报,在那里他们可以输入一个输入(设置服务的价格)。另一个逻辑涉及到将数据保存到数据库,这与我的问题并不相关

我使用以下示例:

它确实有效,因为它正确地显示了警报,但一旦我包括

print("Amount: \(self.tField.text)")
无法识别“self.tField.text”。我得到的具体错误是:

类型为“testVC”的值没有成员“tField”


t字段
setAmount
函数中的局部变量。它不是类的属性

更改:

self.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)
}

我的猜测是,当您呈现警报时,您当前的ViewController就是警报ViewController。。。在您的警报中没有变量tField


在您引用的示例中,警报仅在使用tField值打印后显示。这就是为什么它在那里起作用,但在你的情况下不起作用。

我非常感谢你的帮助,所以谢谢你。我创建了几个全局变量,price和tField(UITextField)。我无法真正处理“完成”处理程序中的所有逻辑,我需要存储价格值,因为我在警报之外的Firebase数据库中一次性输入5-6个值。不需要将文本字段存储为全局字段。我正在添加self.price=self.tField.text!在我的“完成”处理程序中。当我尝试将其保存到我的DB(警报后)时,它似乎没有保存值。我猜这不是正确的方法。让我试试你的具体实现。
tField.text
@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)
}