我将 NSTextField 子类化并覆盖textDidChange:为:
- (void)textDidChange:(NSNotification *)notification
{
// ... My own operation
}
但是当我将一个输入文本框拖到我的.xib
文件中并控制拖动另一个类来分配委托时,我发现委托的controlTextDidChange:
方法从未被调用过。
现在试图解决这个问题,我尝试了以下两种方法:
一、调用super
:
- (void)textDidChange:(NSNotification *)notification
{
// ... My own operation
[super textDidChange:notification];
}
但是我在运行时遇到错误:尝试从对象[0]中插入零对象
二、调用delegate
的方法
- (void)textDidChange:(NSNotification *)notification
{
// ... My own operation
if ([self.delegate responseToSelector:@selector(controlTextDidChange:)])
{
[self.delegate ...]; // <--- Opps, something not happerned here.
}
}
什么没有发生?我希望自动完成应该controlTextDidChange:
在上面的位置显示方法...
。但实际上并没有。我直接键入方法,编译失败,因为找不到方法。
我应该如何让我的子类正常调用委托?我应该如何textDidChange:
正确覆盖该方法?
维陶塔斯的进一步问题:
- 我确定我使用的是
NSTextField
. 我在 controlTextDidChange: 方法中设置了一个断点。正如它被称为,我应该知道。 - 我确实将文本字段控制拖动到委托对象,并在
textDidChange:
方法中打印委托对象,确保委托设置正确。 - 其他委托方法,例如
controlTextDidBeginEditing:
被正确调用。但controlTextDidChange:
不叫 - 我尝试注释掉子
NSTextField
类中覆盖的内容,然后controlTextDidChange:
被调用。 - 因此,我很确定我没有覆盖
textDidChange:
权利。但我不知道如何解决它。 controlTextDidChange:
最让我困惑的是,为什么当我尝试调用它时自动完成没有显示该方法。
关于自动完成,它是这样显示的:
没有- controlTextDidChange:
方法。
对 Vytautas 的第二次进一步回复: