我在一个Window中有一个NSTextField,我创建了一个非常简单的MacRuby委托:
class ServerInputDelegate
attr_accessor :parent
def textDidChange(notification)
NSLog notification.inspect
parent.filter
end
end
我尝试设置控件的委托:
我已经尝试将Window和我能想到的所有其他对象设置为此委托。我也尝试将其设置为其他委托(例如应用程序),并正确触发applicationDidFinishLaunching等事件。
为了在每次NSTextField的内容发生变化时触发此事件,我是否缺少任何技巧?
答案 0 :(得分:3)
子类NSTextField然后在IB中设置您希望子类化为“ServerInputDelegate”的文本字段的Class。一旦你开始输入它就应该为你自动完成。
class ServerInputDelegate < NSTextField
def textDidChange(notification)
NSLog notification.description
puts self.stringValue
end
end
结果
2010-04-30 14:37:24.810 TextFieldTextChanged[69109:a0f] NSConcreteNotification 0x200350b00 {name = NSTextDidChangeNotification; object = <NSTextView: 0x2003b95e0>
Frame = {{2.00, 3.00}, {436.00, 17.00}}, Bounds = {{0.00, 0.00}, {436.00, 17.00}}
Horizontally resizable: YES, Vertically resizable: YES
MinSize = {436.00, 17.00}, MaxSize = {40000.00, 40000.00}
}
答案 1 :(得分:3)
textDidChange:
,也许是令人困惑的,是NSTextDelegate
method,这意味着它只适用于NSText
(以及NSTextView
)个对象。对于NSTextField
,您应该使用NSControl delegate
方法controlTextDidChange:
无需子类化。