删除最后一个字符UITextField

时间:2010-03-31 07:54:30

标签: iphone objective-c cocoa-touch uikit uitextfield

我有一个UITextField,我希望每次点击一个字符时,第一个字符都会被删除。所以每次我在textField中只有一个字符。此外,我希望它显示控制台日志中的每个水龙头。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您需要在文本字段委托中实施shouldChangeCharactersInRange方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:
                  (NSRange)range replacementString:(NSString *)string{
    textField.text = @"";
    return YES;
}

您可能需要检查范围和字符串值以涵盖所有可能的情况(例如复制/粘贴操作)。此代码只是将文本字段的值设置为最后一个键入的字符。

答案 1 :(得分:0)

UITextField继承自UIControl,因此您可以使用属于UIControl类的目标操作机制:

[textField addTarget:self action:@selector(updateTextField) forControlEvents:UIControlEventValueChanged];

在action方法中,您可以仅使用最后一个字符替换UITextField的文本,并在控制台中记录该字符。请注意,由于更改UITextField的文本将再次导致第二次向目标发送“updateTextField”消息,因此您需要某种机制来确定是否更新:

- (void)updateTextField {
    if(updateTextField == YES) {
        updateTextField = NO;
        NSString *lastChar = [textField.text substringFromIndex:[textField.text length]];
        [textField setText:lastChar];
        NSLog(@"%@", lastChar);
    } else {
        updateTextField = YES;
    }
}

或类似的东西......

答案 2 :(得分:0)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if (textField.text.length > 8) {
        return  NO;
    }  
    return YES;

}