2012-07-25 86 views
3

我有一個名爲textFieldInput和一些按鈕的UITextField。不知何故,我禁用輸入視圖,以便如果任何人點擊texField,將不會顯示鍵盤。當按下按鈕時,我正在添加文本。我想抓住這個變化。我想在textField的文本改變時調用一個函數。我怎樣才能做到這一點?UITextField文本更改回調

我試圖通過增加以下功能

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)replacementStr { 
// some my code 
return YES; 
} 

但是,這是行不通的。這隻在我點擊textField時調用。

我也加入我的viewDidLoad功能

[textFieldInput addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 

這也不起作用以下嘗試。

我該怎麼做?

謝謝。

+0

意味着你要你有一個文本框未啓用,當你按下按鈕,它應該是啓用..對嗎? – 2012-07-25 05:04:16

+0

@ tzu.rahul不,我會在按下按鈕時向文本框添加一些文本。 – razibdeb 2012-07-25 05:19:49

+0

沒什麼比當按鈕被按下時你添加文本,除了它是禁用...對嗎?它有一些文本,但它是禁用的。只有在按下按鈕後才能啓用和編輯..我聽起來正確嗎? – 2012-07-25 05:24:16

回答

7

註冊通知。

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(textChanged:) 
               name:UITextFieldTextDidChangeNotification 
              object:YOUR_TEXT_FIELD]; 
+0

我認爲你需要爲上面的object:參數提供textFiled對象。 – Ishu 2012-07-25 05:12:20

+0

當我打字時,給你答案+1。 – Ishu 2012-07-25 05:13:24

+0

你說得對。我錯過了。 – Apurv 2012-07-25 05:13:29

1
shouldChangeCharactersInRange: 

當設置委託與實現此方法控制這樣纔有效。另外一個方法是:

添加這些行viewDidLod

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 

    [nc addObserver:self 
      selector:@selector (handle_TextFieldTextChanged:) 
       UITextFieldTextDidChangeNotification 
      object: textFieldInput]; 

和實施handle_TextFieldTextChanged:

- (void) handle_TextFieldTextChanged:(id)notification { 

    // write your logic here. 
} 
+0

此外,此類通知不應在viewDidLoad中註冊。因爲一旦你再推一個控制器並編輯文本,它就會調用委託方法。這些通知應該在viewWillAppear中註冊,並且應該在viewwillDisAppear中註銷。 – Apurv 2012-07-25 05:15:43

+0

我也試過這@Ishu,但沒有爲我工作 – razibdeb 2012-07-25 05:28:02

+0

@Apurv我要註冊這viewWillAppear並讓你知道它的天氣是否有效。 謝謝。 – razibdeb 2012-07-25 05:28:47

相關問題