2011-08-18 105 views
0

即使我改變了文本字段中的文本,也未調用此UITextField委託方法。 當鍵盤語言設置爲日文/中文輸入時,以及是否從建議的單詞列表中選擇單詞時,會發生這種情況。未調用UITextField委託方法(shouldChangeCharactersInRange)

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

我不確定這是否是iOS中的錯誤。

有沒有人遇到同樣的問題?

+0

這聽起來像iOS版的一個bug。你使用的是哪個版本的iOS?如果你正在輸入英文,這個委託會被調用嗎? – xuzhe

+0

我發現這個模擬器很可能是4.3。這個代表在英文時被調用。當你從建議列表中選擇單詞時,它不會被調用,就像在iPad中一樣。 – rae148

回答

1

我認爲這是iOS 4.x中的一個錯誤,它似乎已經在iOS 5 beta中修復了。

由於關於iOS 5的NDA,我無法詳細說明它。希望這個幫助。

+0

感謝您的信息^^,期待iOS5 – rae148

+0

不客氣。如果你認爲這個答案很有用,那麼投票或選擇它作爲正確的答案將非常感激。 – xuzhe

0

這可能不是iOS 4.x中的一個錯誤。即使在iOS 9.x中,這種情況依然存在。
對於日本/中國或可以選擇從鍵盤上面的字的建議列表中的單詞任何其他語言,此委託方法

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

不會也是UITextField的called.The文本由選用附加詞直。

一種解決方法是使用UITextFieldTextDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(checkForTextfield:) 
              name:UITextFieldTextDidChangeNotification 
              object:nil];  

受影響的文本字段存儲在通知的對象參數。 userInfo字典未使用。

- (void)checkForTextfield:(NSNotification *)noti{ 
    UITextField* textField = noti.object; 
    //do whatever you want with the UITextfield 
} 

而且不要忘了當的dealloc從NSNotificationCenter刪除自身:

- (void)dealloc{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
}