0

我正在使用几个UITextFields 并且想要随时在其中任何一个发生任何变化时做任何事情。

它看起来基本上像:

@IBOutlet weak var f1: UITextField!
@IBOutlet weak var f2: UITextField!
@IBOutlet weak var f3: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    f1.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
    f2.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
    f3.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
}

@objc func textFieldDidChange(_ textField: UITextField) {
    // Data in one of the fields changed.
    if self.view.tag == 1 {
        print("field 1")
    } else {
        if self.view.tag == 2 {
            print("field 2")
        }
        //...
    }
}

如您所见,我尝试设置标签,但不确定如何在此处访问它们。

我正在使用 XCode 9.01 和 Swift 4。

4

2 回答 2

3

你不需要标签,因为你有网点。只需将textField参数与您的每个网点进行比较:

@objc func textFieldDidChange(_ textField: UITextField) {
    if textField == f1 {
        print("field 1")
    } else if textField == f2 {
        print("field 2")
    } else if textField == f3 {
        print("field 3")
    }
}
于 2017-10-27T16:55:17.367 回答
3

对rmaddy的回答进行了快速、适度的改进:

@objc func textFieldDidChange(_ textField: UITextField) {
    switch textField {
    case f1: print("field 1")
    case f2: print("field 2")
    case f3: print("field 3")
    default: fatalError(“Unknown field: \(textField)”)
    }
}

除了使用一个可能会稍微提高代码可读性的人可能会争辩的之外,如果传递了意外的文本字段switch,这个版本还会触发运行时错误。幸运的是,这可能会在稍后捕获一个编程错误;)

于 2017-10-27T17:08:03.243 回答