1

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

class ServerInputDelegate
    attr_accessor :parent

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

我已经尝试设置控件的委托:

替代文字 http://grab.by/31Kr

我尝试将 Window 和我能想到的所有其他对象设置为这个委托。我还尝试将其设置为其他委托(例如应用程序),并且正在正确触发诸如 applicationDidFinishLaunching 之类的事件。

为了让这个事件在每次这个 NSTextField 的内容发生变化时被触发,我有什么技巧吗?

4

2 回答 2

3

子类 NSTextField,然后在 IB 中将您希望子类化的文本字段的类设置为“ServerInputDelegate”。一旦你开始输入它应该为你自动完成。

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}
}
于 2010-04-30T20:42:14.910 回答
3

textDidChange:,也许令人困惑的是,是一种NSTextDelegate方法,这意味着它只适用于NSText(因此NSTextView)对象。对于一个NSTextField,你应该只使用NSControl delegate方法controlTextDidChange:不需要子类。

于 2011-04-29T00:40:18.683 回答