xcode 4.2.1 - 限制TextField中的字符长度

时间:2012-02-27 07:15:38

标签: iphone xcode xcode4 textfield

我一直试图通过互联网上的许多代码限制textField,但没有运气。

我在头文件中添加了UIViewController<UITextFieldDelegate>

我的viewDidLoad中的

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不限制我的文本字段。任何想法?

3 个答案:

答案 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]];
        }
    }
}