Подтвердить что ты не робот

Уведомление об изменении текста для NSTextField

Я хотел бы использовать код из ответа на этот вопрос: Как наблюдать за значением NSTextField на NSTextField, чтобы наблюдать изменения в строке хранится в NSTextField.

[[NSNotificationCenter defaultCenter]
    addObserverForName:NSTextViewDidChangeSelectionNotification
    object:self.textView 
    queue:[NSOperationQueue mainQueue] 
    usingBlock:^(NSNotification *note){
    NSLog(@"Text: %@", self.textView.textStorage.string);
}];

Используемый класс - это NSTextView. Я не могу найти уведомление в NSTextField для использования вместо NSTextViewDidChangeSelectionNotification.

Есть ли в NSTextField уведомление, которое можно использовать в этом случае?

4b9b3361

Ответ 1

Если вы просто хотите определить, когда изменилось значение текстового поля, вы можете использовать метод делегирования controlTextDidChange:, который NSTextField наследует от NSControl.

Просто подключите выход delegate к NSTextField в файле nib к классу контроллера и выполните следующее:

- (void)controlTextDidChange:(NSNotification *)notification {
    NSTextField *textField = [notification object];
    NSLog(@"controlTextDidChange: stringValue == %@", [textField stringValue]);
}

Если вы создаете NSTextField программно, вы можете использовать метод NSTextField setDelegate: после создания, чтобы указать делегата:

NSTextField *textField = [[[NSTextField alloc] initWithFrame:someRect] autorelease];
[textField setDelegate:self]; // or whatever object you want

Делегирование является одним из основных шаблонов проектирования, используемых во всем Cocoa. Вкратце, это позволяет вам легко настраивать поведение стандартных объектов (в данном случае объектов пользовательского интерфейса) без сложностей, связанных с необходимостью подклассификации объекта, чтобы добавить это дополнительное поведение. Например, другой способ нижнего уровня для обнаружения, когда текст в текстовом поле изменился, может заключаться в создании собственного пользовательского подкласса NSTextField, в котором вы переопределяете keyDown:, который NSTextField наследует от NSResponder. Однако подклассификация подобна, потому что это может потребовать, чтобы у вас было глубокое знание иерархии наследования объектов. Для получения дополнительной информации обязательно проверьте следующее:

Cocoa Руководство по основам: делегаты и источники данных

Относительно того, что означает id <NSTextFieldDelegate>: это означает общий объект (id), который объявляет себя соответствующим протоколу <NSTextFieldDelegate>. Подробнее о протоколах см. Objective-C Язык программирования: Протоколы.

Пример проекта GitHub: https://github.com/NSGod/MDControlTextDidChange

Ответ 2

Я считаю, что вы хотите прочитать в полевом редакторе который по существу является (скрытым) NSTextView, который обрабатывает ввод текста ко всем NSTextField в данном окне. Раздел "Использование делегирования и уведомления с помощью редактора полей" должен указывать на вас в правильном направлении.

Ответ 3

В Swift это

public override func controlTextDidChange(_ obj: Notification) {


}