如何识别哪个 UITextField 被 textFieldDidChange 更改了
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
——这可能会稍微提高代码的可读性,有人可能会争辩说——如果传递了一个意外的文本字段,这个版本还会触发一个运行时错误。幸运的是,这可能会在稍后捕获一个编程错误 ;)
我正在使用多个 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
——这可能会稍微提高代码的可读性,有人可能会争辩说——如果传递了一个意外的文本字段,这个版本还会触发一个运行时错误。幸运的是,这可能会在稍后捕获一个编程错误 ;)