我遇到了委托问题,我在故事板中有3个不同的TextField,
我正在尝试,限制用户在键入名称时不键入数字,对于电话号码相同,要限制用户不要键入除数字以外的字符。
所以我正在尝试使用委托方法:
self.txtName.delegate = self;
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
NSString *charOnly = [[string componentsSeparatedByCharactersInSet:
[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"] invertedSet]]
componentsJoinedByString:@""];
return [string isEqualToString:charOnly];
}
但我希望两个字段 - 姓名和电话号码都限制在同一表格上。所以如果
self.txtPhone.delegate = self
在键入时调用shouldChangeCharactersInRange
,仅限于字母表。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
NSString *numOnly = [[string componentsSeparatedByCharactersInSet:
[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]]
componentsJoinedByString:@""];
return [string isEqualToString:numOnly];
}
正如我在jQuery中所做的那样,将类名分配给字段并按以下方式实现:
<input type='text' class='numValid'>
$(".numValid").keypress(function(event)
{
});
<input type='text' class='nameValid'>
$(".nameValid").keypress(function(event)
{
});
有没有类似的方法来实现这个目标?
答案 0 :(得分:1)
委托方法返回正在编辑的文本字段,因此使用它来了解如何应用正确的逻辑。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
BOOL isValid = YES;
if (textField == self.txtName) {
//name validation
} else if (textField == self.txtPhone) {
//number validation
}
return isValid;
}
答案 1 :(得分:-1)
我认为你最好在storyboard编辑器中指定textfield 是一种电话类型,让ios进行检查。原因之一 是因为用户将获得更好的文字输入键盘, 另一个是ios会正确地使用+前缀和数字。
至于名字字段,如果我是你,我不会对它做任何限制。