ios - 在 Swift iOS 中使用 UITextField 集合时识别 UITextField
问题描述
我正在创建一个注册屏幕。UITextField有四个,分别是ID、密码、密码校验、姓名,我是@Iboutlet var signupTextFields: [UITextField]!
我连接的。之后,我想做一个ID,密码验证。
首先,我划分了 ViewController 和 UItextFieldDelegate。
class SignUpViewController: UIViewController {
@IBOutlet var signUpTextFields: [UITextField]! {
didSet {
signUpTextFields.forEach { textField in
textField.delegate = textFieldDelegate
textField.returnKeyType = .next
}
}
}
@IBOutlet weak var nextButton: UIButton!
private lazy var textFieldDelegate = TextFieldDelegate(self)
override func viewDidLoad() {
super.viewDidLoad()
signUpTextFields.first?.becomeFirstResponder()
}
@IBAction func nextButtonTapped(_ sender: UIButton) {
}
}
class TextFieldDelegate: NSObject, UITextFieldDelegate {
private weak var signUpViewController: SignUpViewController?
init(_ signUpViewController: SignUpViewController) {
self.signUpViewController = signUpViewController
}
func textFieldDidBeginEditing(_ textField: UITextField) {
textField.layer.borderWidth = 1
textField.layer.borderColor = UIColor.systemBlue.cgColor
}
func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) {
textField.layer.borderColor = UIColor.black.cgColor
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
使用Delegate提供的函数时的问题是示例代码是使用if-else来识别UITextField,比如
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == idTextField {
//code
} else if textField == passwordTextField {
//code
}
}
我不是这样的,但我想我想将 uitextfield 抽象一点以使用工厂方法或多态性。
有没有办法在不使用 if-Else 的情况下识别 UITextField 集合?
解决方案
如果您的意图是在委托方法中表现不同,那么对所有文本字段使用相同的委托是不好的设计。如果改变它为时已晚,我会推荐一个与文本字段数组相对应的闭包数组。这样,调用正确的闭包是基于firstIndex(of:)
.
推荐阅读
- reactjs - 使用钩子和 redux 材料 ui 将值设置为文本字段
- excel - Vba宏来验证一个表是否包含另一个表的数据并复制行
- android - Android EditText 中的某些设备上未显示复制/粘贴菜单项
- ubuntu - 如何在 Ubuntu 上安装 hadolint
- html - jQuery DatePicker - 将语言更改为西班牙语
- sh - /bin/dash:匹配通配符时的奇怪行为 *
- arrays - 打印与数组元素不匹配的行
- python - Keras Sequential 模型拟合形状
- python - 查找列表中每个值的中位数
- flutter - 时间前具有特定时间格式