代码之家  ›  专栏  ›  技术社区  ›  kolrie

将nstextfield上的textDidChange事件绑定到macruby委托

  •  1
  • kolrie  · 技术社区  · 14 年前

    我在一个窗口中有一个nstextfield,我创建了一个非常简单的macruby委托:

    class ServerInputDelegate
        attr_accessor :parent
    
        def textDidChange(notification)
            NSLog notification.inspect
            parent.filter
        end
    end
    

    我尝试设置控件的委托:

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

    我试过为这个代表设置窗口和其他我能想到的对象。我还尝试将其设置为其他代理(例如应用程序),并且像applicationDidFinishLaunching这样的事件正被正确触发。

    每次此nstextfield的内容更改时,是否缺少触发此事件的任何技巧?

    2 回复  |  直到 13 年前
        1
  •  3
  •   Craig Williams    14 年前

    subclass 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}
    }
    
        2
  •  3
  •   jscs    13 年前

    textDidChange: 可能令人困惑的是, NSTextDelegate method 也就是说它只适用于 NSText (因此 NSTextView )对象。对于一个 NSTextField ,您应该使用 NSControl delegate 方法 controlTextDidChange: 不需要子类。

    推荐文章