我有以下代码:
class ViewController: UIViewController, UITextFieldDelegate {
// MARK: Properties
@IBOutlet weak var layersTextField: UITextField!
@IBOutlet weak var innerShapeTextField: UITextField!
@IBOutlet weak var outerShapeTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
layersTextField.delegate = self
innerShapeTextField.delegate = self
outerShapeTextField.delegate = self
}
// MARK: UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func textFieldDidEndEditing(textField: UITextField) {
// do something
}
}
现在在 textFieldDidEndEditing(_:)
中,我想做一些事情,这取决于哪个 UITextField
调用了这个方法。
有什么方法可以区分,这是哪个 UITextField
做的吗?我可以在 UITextField
上设置某种 ID 或标识符吗?
最佳答案
您可以使用以下两种方法之一做出此决定: socket 或标签。对于 socket 方法,声明一个 socket 实例变量(使用 IBOutlet
关键字),然后建立 socket 连接。在您的委托(delegate)方法中,使用指针比较来测试传入的文本对象是否与导出引用的对象相同。
例如,假设您声明并连接了一个名为 SSN
的 socket 。您的代码可能类似于 Listing 3-1 :
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
if (textField == SSN) {
// ...
return NO;
}
return YES;
}
// Translated to Swift:
func textFieldShouldEndEditing(textField: UITextField) -> Bool {
if textField === SSN {
// ...
return false
}
return true
}
关于ios - 如何区分委托(delegate)方法中的 UITextFields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33584474/