Привязка события textDidChange в NSTextField к делегату MacRuby - PullRequest
1 голос
/ 13 марта 2010

У меня есть 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 ]

3 голосов
/ 29 апреля 2011

textDidChange:, возможно, сбивает с толку, это NSTextDelegate метод , что означает, что он работает только для NSText (и, следовательно, NSTextView) объектов. Для NSTextField вы должны просто использовать метод NSControl delegate controlTextDidChange: Нет необходимости создавать подклассы.

3 голосов
/ 01 мая 2010

Подкласс 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}
}
...