我如何更正此警告?

时间:2011-06-14 16:48:33

标签: objective-c xcode warnings

我正在为数字键盘搜索完成按钮,然后我看到了这个问题:

How to show "Done" button on iPhone number pad

我将Archie的答案代码复制到我的答案中,我在这方面得到了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类型初始化'struct NSNotification *',期望'struct UITextField *'

我该如何纠正?我试图用UITextField进行切换,但一切都搞砸了

2 个答案:

答案 0 :(得分: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 :(得分:0)

textFieldDidBeginEditing不是通知,它是委托方法。预期签名为- (void)textFieldDidBeginEditing:(UITextField *)aTextField