swift - 检查另一个类中的uitextfield是否为空

时间:2016-05-10 14:15:21

标签: ios swift uitextfield optional

我想验证父视图控制器中容器中的表单。当单击父视图控制器中的按钮时,如何验证表单(检查所有字段不是nil)。该按钮在父视图控制器中有一个IBOutlet,它从表单的类中调用一个方法。

    @IBAction func submitOrder(sender: AnyObject) {
        let formView = FormViewController()
        formView.getFieldValues()
    }

方法是,

    func getFieldValues() {
        if (self.nameField.text == "") {
            print("Name field is empty")
        }
    }

子视图中的nameField具有IBOutlet,

@IBOutlet weak var nameField: UITextField!

单击父视图控制器中的按钮时,我得到经典错误

  

致命错误:在解包可选值时意外发现nil

因此,这与选项或父视图控制器无法识别容器视图中的文本字段有关。

3 个答案:

答案 0 :(得分:2)

当你写道:

    let formView = FormViewController()
    formView.getFieldValues()

您创建了一个全新的FormViewController,它未从Storyboard加载,因此没有连接出口。但是,即使它们与某些东西联系在一起,也会出现在新的文本字段中,而不是屏幕上的字段。

你不应该创建一个新的 - 你应该访问你正在显示的那个。

如果没有更多代码,我们无法提供帮助,但是在父级中您创建了正在显示的表单视图,请保留对它的引用,以便以后可以访问它。

答案 1 :(得分:0)

一种方法是您可以使用textfield的委托方法临时保存文本字段数据(无论用户输入什么)(如用户默认值)。

单击按钮时,您只需要检查存储的数据,如果没有输入任何内容,则返回nil或空字符串,无论它是什么,您都可以识别并验证文本字段。

答案 2 :(得分:0)

Lou对于问题的根源是正确的FormViewController是新的,未连接的实例。要让父视图控制器识别容器视图的uiTextFields,您必须使用prepareForSegue。在故事板中命名containerView segue后,您必须实现此方法。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "formView" {
        formView = segue.destinationViewController as? FormViewController
    }
}

formView是在类中声明的FormViewController的空实例。建立此连接允许父视图类获取UITextFields

FormViewController的值