2011-06-14 169 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