在PyObjc和Cocoa中实现NSText代理方法
在我正在做的项目中,我想要在特定的文本框里粘贴一些文字时,能够调用一个方法。不过,我似乎没能做到这一点,下面是我尝试过的内容。
我创建了一个自定义类(基于NSObject),用来作为我的文本框的代理,然后给它添加了一个方法:textDidChange:
class textFieldDelegate(NSObject):
def textDidChange_(self, notification):
NSLog("textdidchange")
接着,我在界面构建器中实例化了这个类的一个对象,并把它设置为NSTextField的代理。不过,这似乎并没有起作用。然而,当我编译来自http://www.programmish.com/?p=30的示例代码时,一切都运行得很好。我该如何实现这个代理代码,让它真正有效呢?
1 个回答
3
你遇到的问题是因为 textDidChange_
这个方法并不是一个代理方法。它是 NSTextField
里的一个方法,用来发送文本变化的通知。如果你查看一下 textDidChange
的文档,你会发现里面提到了真正的代理方法名称:
这个方法会让接收者的代理收到一个 controlTextDidChange: 的消息。想了解更多关于文本代理方法的信息,可以查看 NSControl 类的说明。
实际上,代理方法叫做 controlTextDidChange_
,它是在 NSTextField
的父类 NSControl
中定义的。
把你的代理方法改成:
def controlTextDidChange_(self, notification):
NSLog("textdidchange")
这样就可以正常工作了。