将NSTextField上的textDidChange事件绑定到MacRuby委托

时间:2010-03-13 02:15:02

标签: xcode interface-builder macruby

我在一个Window中有一个NSTextField,我创建了一个非常简单的MacRuby委托:

class ServerInputDelegate
    attr_accessor :parent

    def textDidChange(notification)
        NSLog notification.inspect
        parent.filter
    end
end

我尝试设置控件的委托:

alt text http://grab.by/31Kr

我已经尝试将Window和我能想到的所有其他对象设置为此委托。我也尝试将其设置为其他委托(例如应用程序),并正确触发applicationDidFinishLaunching等事件。

为了在每次NSTextField的内容发生变化时触发此事件,我是否缺少任何技巧?

2 个答案:

答案 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:无需子类化。