2011-10-29 40 views
1

當我從UITextField字段中逐個刪除字符時,會調用代理方法textField:shouldChangeCharactersInRange:replacementString:UITextFieldDelegate和全行刪除

當我在文本框中輸入完整的字符行,然後按住刪除鍵時,iOS首先調用它刪除的每個字符的委託。但是在某個時候(大約一半的時候),它只是刪除了剩下的一切。奇怪的是textField:shouldChangeCharactersInRange:replacementString:不會在這種情況發生時調用。 textFieldShouldClear:也不是。

如何檢測此事件?我想在文本框爲空時更新UI。如果我以這種方式清空它,我的代碼無法檢測到。

回答

0

您可以註冊一個對象來觀察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 :),它將調用該對象實例中所有textField的通知。