【问题标题】:observe whether all textfields of an array of textfields are empty or not观察文本字段数组的所有文本字段是否为空
【发布时间】:2022-11-03 16:27:35
【问题描述】:
class Form {
    
    @IBOutlet var fieldsToClear: [UITextField]!  //Outlet collection of 20 textfields of the form screen
    
    var allFieldsAreEmpty : Bool = false // variable to change when ever any of the textfield changes
    
}

我在视图控制器中有 20 个文本字段。我为所有文本字段创建了一个 outletCollection。 我想知道是否可以观察所有文本字段并检查它们中的任何一个是否为空等等,而无需为所有文本字段一一使用任何事件出口,这可能会使视图控制器变得混乱。

我想要的只是检查所有文本字段并相应地更改 allFieldsAreEmpty 变量。

【问题讨论】:

    标签: swift xcode uikit uitextfield notificationcenter


    【解决方案1】:

    检查所有文本字段是否为空:

    这是一种方法:

    // All are empty if it's true.
    fieldsToClear.compactMap { $0.text }.allSatisfy { $0.isEmpty }
    

    .compactMap { $0.text } 从所有文本字段中获取所有非零文本值。 .allSatisfy { $0.isEmpty } 检查所有文本是否为空。

    观察文本字段:

    要观察文本字段的变化,您可以为其分配一个委托:

    textField.delegate = // ... Something that conforms to UITextFieldDelegate
    

    在您的情况下,您可以将相同的委托分配给所有文本字段。例如,在viewDidLoad 中:

    fieldsToClear.forEach { $0.delegate = /* your delegate */ }
    

    UITextFieldDelegate 具有跟踪文本编辑的方法。例如,每当文本字段中的文本编辑结束时,都会调用 textFieldDidEndEditing(_:)。如果这是您检查的合适时机,您可以将其插入:

    func textFieldDidEndEditing(_ textField: UITextField) {
      allFieldsAreEmpty = fieldsToClear.compactMap { $0.text }.allSatisfy { $0.isEmpty }
    }
    

    【讨论】:

    • 好吧...我应该在 viewDidLoad 上调用它吗?
    • 这只是一个返回truefalse 的布尔检查。我将更新我的答案以包含有关如何观察它的选项。
    • 更新了答案,包括一些关于观察文本字段的信息。
    猜你喜欢
    • 2016-11-04
    • 2021-07-01
    • 2015-12-28
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多