我一直试图通过互联网上的许多代码限制textField,但没有运气。
我在头文件中添加了UIViewController<UITextFieldDelegate>
和textField.delegate = self;
并在我的.m文件中实施了以下资金:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
return !([newString length] > 5);
}
此stil不限制我的文本字段。任何想法?
答案 0 :(得分:2)
执行以下操作,因为它是this
的完全重复- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength > 5) ? NO : YES;
}
答案 1 :(得分:0)
替换字符串只是按下的1个字符,而不是整个字符串,因此您需要在计数之前将It添加到当前的textfield.text中。 您的计数可能总是1(如果粘贴一个单词则更多)
答案 2 :(得分:0)
我在我的代码中实现了它,它可以工作:
此代码消除了所有字母只接受数字,但是就像我删除字符一样,你可以删除长度为5的所有内容,它会保持一个很好的效果,然后显示和消失
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextFieldTextDidChangeNotification object:textField];
}
- (void)textChanged:(NSNotification *)textField {
NSString *text = [[textField object] text];
NSString *last = [text substringFromIndex:[text length] -1];
NSArray *accept = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7" , @"8", @"9", @".", nil];
for (int i=0; i<[accept count]; i++) {
NSLog(@"%@", [accept objectAtIndex:i]);
if (![last isEqualToString:[accept objectAtIndex:i]]) {
[[textField object] setText:[text substringToIndex:[text length]-1]];
}
}
}