【问题标题】:How to loop through view outlets in a UIViewController with Swift?如何使用 Swift 遍历 UIViewController 中的视图出口?
【发布时间】:2015-03-20 13:10:25
【问题描述】:

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

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

【问题讨论】:

    标签: swift uiviewcontroller iboutlet


    【解决方案1】:

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

    要在 InterfaceBuilder 中创建 outlet 集合,按住 ctrl 并从第一个 UITextField 拖动到助手编辑器中的类文件。然后选择Outlet Collection

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

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

    @IBOutlet var textFields: [UITextField]!
    
    func checkTextFields() {
        for textField in self.textFields {
            ... // do your checks
        }
    }
    

    【讨论】:

    • 您如何创建该集合?与IB?
    • 酷。到目前为止还没有这样用过。
    • 最佳答案!谢谢?
    • 天哪,我怎么不知道这件事,太神奇了。数组可以是非可选的吗? (初始化为空,后来被接口生成器变异?)
    【解决方案2】:

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

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

    【讨论】:

    • 我在 if let textField = view as? 时遇到异常? UITextField { 从类型 EXC_BAD_INSTRUCTION
    • @twofish187 您应该查看“zisoft”答案。他的回答比我的要好得多,能达到你想要的效果。
    • Nitpick,但您应该使用 textField.text.isEmpty 而不是 == ""
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2021-09-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多