簡體   English   中英

如何確定使用textFieldDidChange更改了哪個UITextField

[英]How to identify which UITextField was changed with textFieldDidChange

我正在使用幾個UITextField並且想要在它們中的任何一個發生任何更改時隨時進行。

它基本上看起來像:

@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。

因為有分店,所以您不需要標簽。 只需將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")
    }
}

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 (可能會稍微提高代碼的可讀性)外,如果傳遞了意外的文本字段,此版本還會觸發運行時錯誤 幸運的是,稍后可能會遇到編程錯誤;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM