0

我将 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:正确覆盖该方法?


维陶塔斯的进一步问题:

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

关于自动完成,它是这样显示的:

没有- controlTextDidChange:方法。


对 Vytautas 的第二次进一步回复:

我尝试调用 '[self controlTextDidChange]' 但它不起作用,并且发生错误(如下所示):

4

1 回答 1

1

我可以说这- controlTextDidChange:是肯定的。

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

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

在这种情况下- controlTextDidChange:,肯定不会被调用。如果是这种情况,那么你应该看看NSTextView,NSTextViewDelegateNSTextDelegate。NSTextView 委托对此有另一种方法- textDidChange:

于 2013-05-15T10:05:55.350 回答