首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 監聽 UITextField 文本變化:KVO 觀察 text 屬性替代 Delegate

     編輯:程式設計綜合問答

不使用 Delegate 情況下,用 KVO (Key-Value Observing) 觀察 UITextField 的 text 屬性變化。

KVO 註冊與回調

[textField addObserver:self forKeyPath:@"text" options:0 context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"text"] && object == textField) {
        // 文本已變更
        NSString *newText = textField.text;
        // 處理邏輯
    }
}

// 移除觀察(dealloc 或 viewDidDisappear)
[textField removeObserver:self forKeyPath:@"text"];

注意事項

  • KVO 會在文本屬性設置時觸發,包括程序化設置,需區分用戶輸入與代碼賦值。
  • options:0 表示不需要新舊值字典,若需舊值用 NSKeyValueObservingOptionOld。
  • ARC 環境下觀察者被釋放前必須移除觀察,否則崩潰。

對比:Delegate vs KVO

方式優點缺點
Delegate (textField:shouldChangeCharactersInRange:)可攔截/修改輸入,區分用戶操作需設置 delegate,單一監聽者
KVO多對象可觀察同一屬性,無侵入式程序化賦值也觸發,需額外過濾
Notification (UITextFieldTextDidChangeNotification)系統級廣播,解耦同上,且需註冊通知中心

KVO 靈活監聽屬性變化,適合非 Delegate 場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved