如何正确覆盖textDidChange:方法?

时间:2013-05-15 09:02:45

标签: objective-c macos nstextfield

我将NSTextField子类化并将 textDidChange:覆盖为:

- (void)textDidChange:(NSNotification *)notification
{
    // ... My own operation
}

但是当我将输入文本框拖到我的.xib文件中并控制拖动另一个类来分配委托时,我发现委托人的 controlTextDidChange: 方法从未被调用过。< / p>

现在尝试解决这个问题,我尝试了两种方法:

予。致电super

- (void)textDidChange:(NSNotification *)notification
{
    // ... My own operation
    [super textDidChange:notification];
}

但是我在运行时遇到错误:尝试从对象插入nil对象[0]

II。调用delegate的方法

- (void)textDidChange:(NSNotification *)notification
{
    // ... My own operation
    if ([self.delegate responseToSelector:@selector(controlTextDidChange:)])
    {
        [self.delegate ...];    // <--- Opps, something not happerned here.
    }
}

什么没有被逮捕?我希望自动完成功能应在controlTextDidChange:位置显示...方法。但事实并非如此。我直接输入了方法,编译失败,因为找不到方法。

我应该如何让我的子类正常调用委托?我该如何正确覆盖textDidChange:方法?


Vytautas的进一步问题:

  1. 我确定我在使用NSTextField。我在controlTextDidChange:方法中设置了一个断点。正如它所说,我应该知道。
  2. 我控制 - 将文本字段拖到委托对象,然后在textDidChange:方法中打印委托对象,确保委托设置正确。
  3. 正确调用了其他委托方法,例如controlTextDidBeginEditing:。但controlTextDidChange:未调用
  4. 我尝试将已覆盖的NSTextField类中的覆盖文件注释掉,然后调用了controlTextDidChange:
  5. 因此我很确定我没有覆盖textDidChange:权利。但我不知道如何解决它。
  6. 让我感到困惑的是,当我试图调用它时,为什么自动完成没有显示controlTextDidChange:方法。
  7. 关于自动完成,以下是它的显示方式:

    http://i44.tinypic.com/11rxh5f.jpg

    没有- controlTextDidChange:方法。


    Vytautas的第二次回复:

    我尝试调用'[self controlTextDidChange]'但它不起作用,并且发生了错误(如下所示): http://oi41.tinypic.com/9i9pmx.jpg

1 个答案:

答案 0 :(得分:1)

我可以说肯定会调用 - controlTextDidChange:

你的* .xib绑定可能有问题。

也可以在* .xib中使用NSTextView,而不是NSTextField。

在这种情况下,肯定不会调用 - controlTextDidChange: 。 如果是这种情况,那么您应该查看NSTextViewNSTextViewDelegateNSTextDelegate。 NSTextView委托为此 - textDidChange:

提供了另一种方法