在我的应用程序中,我有一个字段供用户输入全名,但我需要阻止用户在文本字段中输入任何数字和表情符号。任何想法怎么做?
同时,我不能使用ASCII键盘,因为用户必须能够以不同的语言输入。
答案 0 :(得分:1)
您正在指定field
,但没有给出更多关于它的精确度,因此我假设我们在这里谈论UITextField
,因为其他控件将遵循相同的逻辑:
首先应该为UITextField
设计一个代表,让它说它将是当前的视图控制器:
#import <UIKit/UIKit.h>
@interface _4644493ViewController : UIViewController<UITextFieldDelegate>
@end
然后,在你的viewController.m中,你应该检查是否在键盘上按下的值是接受字符之前接受的字符(在这个例子中让我们尝试使用数字):
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([string isEqual:@"1"] || [string isEqual:@"2"] || [string isEqual:@"3"] || [string isEqual:@"4"] || [string isEqual:@"5"] || [string isEqual:@"6"] || [string isEqual:@"7"] || [string isEqual:@"8"] || [string isEqual:@"9"]) {
return NO;
}
return YES;
}
另外,不要忘记设计UITextField
的代表,例如:
UITextField *test = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 200, 30)];
[test.layer setBorderColor:[UIColor blackColor].CGColor];
[test.layer setBorderWidth:2.0];
test.delegate = self;
[self.view addSubview:test];
答案 1 :(得分:1)
已经提到的委托函数的更好(IMO)和更简洁的实现:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
return [string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location == NSNotFound);
}
这将从数字0-9之外的每个可能字符创建一个字符集,然后在字符串中查找它们中的任何一个。此解决方案正确处理空字符串,这是用户使用删除键时发送的字符串。
如果要允许其他标点符号,可以使用NSMutableCharacterSet创建自己的字符集或使用NSCharacterSet方法
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789,.-"];
代替decimalDigitCharacterSet