4

步骤 1. 在 xib 中添加一个 NSTextField

步骤 2. 在 .h 文件中添加 NSTextFieldDelegate,按住 Control 并拖动 NSTextField 到 File's Owner 以设置委托给它

第三步,在 .m 文件中添加方法:

- (void)textDidChange:(NSNotification *)notification{
    NSLog(@"textDidChange");
}

但是方法 textDidChange: 没有被调用?

有什么错误吗?

4

2 回答 2

13

文件的所有者不是应用程序委托 - 是您放置该方法的应用程序委托吗?您应该控制拖动到标记为应用程序委托的蓝色立方体。

编辑后:委托收到的消息是 controlTextDidChange:不是 textDidChange,因此请改为实现该消息。

于 2012-07-27T02:56:39.990 回答
6

您需要注册一个观察者来监听NSNotification.

// When the NSWindow is displayed, register the observer.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidChange:) name:NSControlTextDidChangeNotification object:nil];

- (void)controlTextDidChange:(NSNotification *)obj {
    // You can get the NSTextField, which is calling the method, through the userInfo dictionary.
    NSTextField *textField = [[obj userInfo] valueForKey:@"NSFieldEditor"];
}

看起来,返回的对象NSFieldEditor是 a ,而不是您可能期望NSTextView的同一个对象。NSTextField

但是,根据 Apple 的文档,如果您实现此方法并且控件委托已注册到此对象,则应自动注册通知。

控件发布一个 NSControlTextDidChangeNotification 通知,如果控件的委托实现了这个方法,就会自动注册接收通知

来源:https ://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSControl_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/controlTextDidChange :

于 2014-02-17T16:57:11.640 回答