如何使用 Swift 循环访问 UIViewController 中的视图插座?

How to loop through view outlets in a UIViewController with Swift?

我想知道,是否可以使用 Swift 遍历 UIViewController 的所有插座。

具体来说,我想检查是否每个文本字段都由用户填写。

我认为您必须手动执行此操作,或者将它们添加到数组并遍历该数组,或者您可以遍历视图的所有子视图并检查它是否是文本字段。

for view in self.view.subviews as [UIView] {
    if let textField = view as? UITextField {
        if textField.text == "" {
            // textfield is empty
            return
        }
    }
}

这就是 Outlet Collections 的用途。将所有文本字段拖到 InterfaceBuilder 中的同一个 Outlet 集合中,并在 class 文件中为该集合创建一个 @IBOutlet

要在 InterfaceBuilder 中创建插座集合,按住 Ctrl 键并从第一个 UITextField 拖动到助理编辑器中的 class 文件。然后选择Outlet Collection:

按住 Ctrl 并拖动下一个 UITextField 到那个 @IBOutlet 以将其添加到集合中:

对所有文本字段重复该操作。

@IBOutlet var textFields: [UITextField]!

func checkTextFields() {
    for textField in self.textFields {
        ... // do your checks
    }
}