如何使用委托函数清除文本字段

时间:2011-07-26 07:22:35

标签: iphone

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField.text.length >=8)
    {

        return NO; // return NO to not change text
    }
    else {
        return YES;
    }
}

当我将此方法添加到我的程序时,文本将不清楚。 我该如何清除我的文本字段。使用以下方法

- (BOOL)textFieldShouldClear:(UITextField *)textField 

1 个答案:

答案 0 :(得分:2)

您看到的行为不依赖于textFieldShouldClear:,其默认实现已返回YES(source):

  

文本字段调用此方法以响应用户按下内置清除按钮。 (默认情况下不显示此按钮,但可以通过更改文本字段的clearButtonMode属性中的值来启用此按钮。)编辑开始时也会调用此方法,并且文本字段的clearsOnBeginEditing属性设置为YES。

当textField包含多于8个字符时,问题就是textField:shouldChangeCharactersInRange:拒绝任何更改:

 if (textField.text.length >=8) {
     return NO; // return NO to not change text

我不知道你为什么设置这个或者你能找到另一种方法来获得相同的东西,但是如果你想这样做,那么可能的解决方法是检查replacementString,如果是为空,通过返回YES来允许文本更改。

如果你想要一个更复杂的解决方案,你可以考虑在调用textFieldShouldClear:时设置一个ivar标志,这样当你找到textField:shouldChangeCharactersInRange:中设置的标志时,你会返回YES。

 - (BOOL)textFieldShouldClear:(UITextField *)textField {
     self.shouldClearTextCalled = YES;
     return YES;
 }

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


    if (self.shouldClearTextCalled)
         return YES;
    self.shouldClearTextCalled = NO;

    if (textField.text.length >=8) {
         return NO; // return NO to not change text
    } else { 
         return YES;
    }
 }