大佬教程收集整理的这篇文章主要介绍了objective-c – 如何仅在UITextField中输入数字并限制最大长度?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRangE)range replacementString:(NSString *)String { NSUInteger newLength = [textField.text length] + [String length] - range.length; NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersinstring:numbERS_ONLY] invertedSet]; NSString *filtered = [[String componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; while (newLength < CHARACTER_LIMIT) { return [String isEqualToString:filtered]; } /* Limits the no of characters to be enter in text field */ return (newLength > CHARACTER_LIMIT ) ? NO : YES; }
当我按长按文本框(如下图),并在两个数字之间输入字符串,它也允许所有特殊字符和承租人.
这个答案是基于你的常量定义如下的假设:
#define numbERS_ONLY @"1234567890" #define CHARACTER_LIMIT 3
您的逻辑失败的原因是,当newLength将等于CHARACTER_LIMIT时,您永远不会处理该事件.
为了说明你的文本框是空的,你要求将字符串@“ABC”粘贴到文本域,你的委托方法被调用.您创建过滤的字符串,正确计算为空字符串,您不能等待执行行return [String isEqualToString:filtered];但是,由于newLength为3,因此您不符合while循环的条目要求,所以您从未真正评估该行.所以简单的return(newLength> CHARACTER_LIMIT)?不:是决定返回值.
如果您的CHARACTER_LIMIT由于某种原因实际上为4,则只需将“ABCD”设为逻辑仍然适用的字符串即可.
这是一个简单的例子,您的功能更正了工作.再次,我假设CHARACTER_LIMIT等于3.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRangE)range replacementString:(NSString *)String { NSUInteger newLength = [textField.text length] + [String length] - range.length; NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersinstring:numbERS_ONLY] invertedSet]; NSString *filtered = [[String componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; return (([String isEqualToString:filtered])&&(newLength <= CHARACTER_LIMIT)); }
以上是大佬教程为你收集整理的objective-c – 如何仅在UITextField中输入数字并限制最大长度?全部内容,希望文章能够帮你解决objective-c – 如何仅在UITextField中输入数字并限制最大长度?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。