晚上,在我的应用中,我有几个UITextfield
。每个人都必须确认不同的限制。
例如,我有一个日期字段,zipCode字段,SSN字段等。
从Apple文档中我发现:
分配委托对象以处理重要任务,例如:
确定是否允许用户编辑文本字段的内容。
验证用户输入的文本。
响应键盘返回按钮的点按。
将用户输入的文字转发到应用的其他部分。
在一个控制器对象中存储对文本字段的引用。
所以我非常确定我必须使用委托和func textFieldDidEndEditing(_:)
。
我想到的唯一方法是在switch
内使用func textFieldDidEndEditing(_:)
语句来确认代表的差异限制。
是否有更好,更安全,更快速的模式来解决这个问题?
答案 0 :(得分:1)
你是对的,你必须检查文本字段,你可以使用switch语句检查分配给不同文本字段的标签,就像你说的那样, 或者你可以比较文本字段本身,
如果textfield1,textfield2是两个文本字段的出口,则可以比较如下,
func textFieldDidEndEditing(textField: UITextField)
{
if textField == textfield1
{
}
else if textField == textfield2
{
}
}
答案 1 :(得分:1)
您可以为每个文字字段设置唯一的tag
,并且可以在textFieldDidEndEditing
中进行比较,也可以在每个textField中进行IBOutlet
,并且可以在textFieldDidEndEditing
中进行比较,例如,
func textFieldDidEndEditing(textField: UITextField) {
// By tag
if textField.tag == 100 {
}
// OR
//by outlet
if textField == self.myTextField {
}
}
答案 2 :(得分:1)
您可以创建验证枚举
enum Type {
case zipcode
case number
}
然后您可以创建一个验证方法,如下所示:
func isValidate(text: String, type: Type) -> Bool {
switch type {
case .zipcode:
...
}
}
此方法可以在Util类中。这是最好的做法。因为你的逻辑是从外面封装的。
答案 3 :(得分:1)
如果您需要更多地控制提交到文本字段的文本,或者如果您想在编辑文本字段时提供反馈,则应该实现另一个代理:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// Build and check the new text value. Accept or reject the change.
}
在委托中,您可以构建新的text
值。验证它,应用约束,决定用户应该收到哪些反馈("您的密码必须至少长8个字符","这不是有效的IBAN"),接受或拒绝变化(即返回false
)。
请注意,如果手动分配text
属性,则委托不。此外,当文本被粘贴到文本字段或从文本字段中删除时,会调用此委托,这可能会使事情变得更加复杂,具体取决于您的操作。