2011-06-14 104 views
0

我正在尋找的數字鍵盤一個完成按鈕,然後我看到了這個問題:我如何糾正這個警告?

How to show "Done" button on iPhone number pad

我複製阿奇的答案代碼到我的,我得到2個警告,在這方面:

- (void)textFieldDidBeginEditing:(NSNotification *)note { 
    [self updateKeyboardButtonFor:[note object]]; 
} 


- (void)keyboardWillShow:(NSNotification *)note { 
    [self updateKeyboardButtonFor:[self findFirstResponderTextField]]; 
} 

- (void)keyboardDidShow:(NSNotification *)note { 
    [self updateKeyboardButtonFor:[self findFirstResponderTextField]]; 
} 

的警告是:

不兼容的Objective-C類型初始化 '結構NSNotification *',預期 '結構的UITextField *'

我該如何糾正?我試圖用UITextField進行切換,但它全部搞砸了

+1

這就是爲什麼你不只是複製和粘貼代碼。 – BoltClock 2011-06-14 16:54:08

+0

我沒有,我檢查了代碼,但我沒有發現錯誤。這可能是我的新語言.. – Phillip 2011-06-14 16:58:25

回答

1

正如BoltClock所建議的,Archie使用委託方法的名稱作爲通知處理程序似乎有點奇怪。這個問題可能是因爲你必須採用UITextFieldDelegate協議。如果你這樣做,刪除行觀察的通知,

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(textFieldDidBeginEditing:) 
              name:UITextFieldTextDidBeginEditingNotification 
              object:nil]; 

,然後編輯使textFieldDidBeginEditing:方法而成爲文本字段的委託,

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    [self updateKeyboardButtonFor:textField]; 
} 

或者,重命名事件的textFieldDidBeginEditing:與其他一些合適的方法名稱

+1

如果你閱讀OP所提到的答案,看起來該文章選擇使用通知而不是文本字段委託,出於任何奇怪的原因。 – BoltClock 2011-06-14 16:54:49

+0

是的,謝謝迪帕克!它的工作非常好! – Phillip 2011-06-14 17:04:24

+0

@BoltClock你是對的。真奇怪。 – 2011-06-14 17:04:29

0

textFieldDidBeginEditing不是通知,而是一種委託方法。預期的簽名是- (void)textFieldDidBeginEditing:(UITextField *)aTextField

+0

其中aTextField是我的TextField的名稱,對不對? – Phillip 2011-06-14 16:54:07

+0

這個名字沒有關係,它在編輯開始時稱爲BY文本字段,文本字段將作爲該參數傳遞。 – 2011-06-14 16:54:37

+0

好吧,我會測試並讓你知道。 – Phillip 2011-06-14 16:55:52

相關問題