【问题标题】:UITextFieldDelegate and full line deleteUITextFieldDelegate 和整行删除
【发布时间】:2011-10-29 05:48:30
【问题描述】:

当我从UITextField 字段中逐一删除字符时,会调用委托方法textField:shouldChangeCharactersInRange:replacementString:

当我在文本字段中键入一整行字符,然后按住删除键时,iOS 首先为它删除的每个字符调用委托。但是在某些时候(大约在行的一半)它只是删除了所有剩余的东西。奇怪的是,当这种情况发生时,textField:shouldChangeCharactersInRange:replacementString: 没有被调用。 textFieldShouldClear: 也不是。

如何检测此事件?我想在文本字段为空时更新 UI。如果我以这种方式清空它,我的代码将无法检测到。

【问题讨论】:

    标签: ios cocoa-touch uitextfield


    【解决方案1】:

    您可以注册一个对象以在您的文本字段上观察 UITextFieldDidChangeNotification

    例如:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.textField];    
    }
    

    然后

    - (void)textFieldDidChange:(NSNotification *)notification
    {
        UITextField *aTextField = [notification object];
        if ([aTextField.text length] == 0) {
            aTextField.backgroundColor = [UIColor redColor];
        }
    }
    

    如果你设置断点

    aTextField.backgroundColor = [UIColor redColor];
    

    您会看到它在最后一次删除发生之前被调用,将文本字段的文本属性设置为 nil。

    您也可以简单地访问您的属性 self.textField,但我正在演示如何访问通知引用的对象。如果你在 -addObserver:selector:name:object: 中省略了最后一个参数(object:),它将调用该对象实例中所有 textFields 的通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多