UITextField中限制输入的办法

来源:互联网 发布:验证域名所有权 编辑:程序博客网 时间:2024/06/06 04:31

文章原址:http://www.haogongju.net/art/1449847点击打开链接


常常开发应用的时候,希望UITextField能限制输入的内容,比如纯数字,或者英文加数字。当然iPhone可以直接限定键盘,但iPad就不理想,即使你把键盘设成Phone Pad,Number Pad之类的,至少都会出现下面这种结果:

以上肯定可以输入括号,@号之类的。但我们在应用中如果要求输入纯数字,或者有其他类的要求,怎么办呢?我给出一个解决方案(高手请路过,下面会讲的比较罗嗦):

原理:实现UITextField委托中的 “-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string” 方法。

首先,在头文件中加入UITextFieldDelegate委托,在IB中将UITextField的委托指向File’s Owner。好了,设好委托了,然后在.m文件中实现“-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string”,代码:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSCharacterSet *cs; cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet]; NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; BOOL canChange = [string isEqualToString:filtered]; return canChange; }

上面那个NUMBERS是一个宏,可以在文件顶部定义:

#define NUMBERS @”0123456789\n” (这个代表可以输入数字和换行)

所以,如果你要限制输入英文和数字的话,就可以把这个定义为:

#define kAlphaNum   @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。

当然,你还可以在以上方法return之前,做一提示的,比如提示用户只能输入数字之类的。如果你觉得有需要的话。

以上内容,转载请注明来自博客园,作者:jauntlin

首发自jauntlin的技术专栏。