Реализация методов делегирования NSText в PyObjc и Cocoa - PullRequest
3 голосов
/ 01 июня 2009

В проекте, который я создаю, я бы хотел, чтобы метод вызывался, когда я вставляю некоторый текст в определенное текстовое поле. Кажется, я не могу заставить это работать, но вот что я попробовал

Я предложил пользовательскому классу (основанному на NSObject) быть делегатом для моего текстового поля, затем дал ему метод: textDidChange:

class textFieldDelegate(NSObject):
    def textDidChange_(self, notification):
        NSLog("textdidchange")

Затем я создал экземпляр объекта этого класса в конструкторе интерфейсов и установил его в качестве делегата NSTextField. Это, однако, похоже, ничего не делает. Тем не менее, когда я создаю пример кода из http://www.programmish.com/?p=30,, кажется, все работает отлично. Как мне реализовать этот код делегата, чтобы он действительно работал?

1 Ответ

3 голосов
/ 01 июня 2009

Причина, по которой это не работает для вас, заключается в том, что textDidChange_ не является методом делегата. Это метод NSTextField, который отправляет уведомление об изменении. Если вы заглянули в документы для textDidChange, вы увидите, что здесь упоминается фактическое имя метода делегата:

Этот метод заставляет делегата получателя получить сообщение controlTextDidChange :. См. Спецификацию класса NSControl для получения дополнительной информации о текстовом методе делегата.

Метод делегата фактически называется controlTextDidChange_ и объявляется в суперклассе NSTextField, NSControl.

Измените ваш метод делегата на:

def controlTextDidChange_(self, notification):
    NSLog("textdidchange")

и оно должно работать на вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...