NSTextField делегат уведомлений - как получить текст? - PullRequest
8 голосов
/ 11 мая 2011

Я пытался научиться использовать XCode, но меня смущает то, как зарегистрировать, что NSTextField изменилось. По сути, у меня есть NSTextField и кнопка. Нажатие на кнопку делает вещи с текстом в поле. Однако я хочу иметь возможность получать текст поля без необходимости использовать текстовое поле «Действие: отправить при завершении редактирования». То есть я хочу иметь возможность вводить текст и сразу нажимать кнопку, не нажимая ввод или вкладку из текстового поля. Похоже, что способ сделать это было бы путем установки делегата для моего NSTextField, который отвечает на

- (void)controlTextDidChange:(NSNotification *)aNotification

Но я не понимаю, как получить введенный текст. Я предполагаю, что это как-то связано с

[[aNotification userInfo] valueForKey:@"NSFieldEditor"];

но я действительно понятия не имею, куда идти.

Ответы [ 3 ]

10 голосов
/ 11 мая 2011

Вы на правильном пути!Объект, который вы получаете из пользовательского информационного словаря уведомления, - это Редактор полей , который представляет собой просто NSTextView, который обрабатывает ввод текста от имени текстового поля.

Как только выэтот объект, все, что вам нужно сделать, это попросить его textStorage, который является NSTextStorage* объектом, содержащим текст.Этот объект, в свою очередь, имеет string, который является простым старым NSString, содержащим только символы.

NSTextView * fieldEditor = [[aNotification userInfo] objectForKey:@"NSFieldEditor"];
NSString * theString = [[fieldEditor textStorage] string];

* Подкласс NSAttributedString, который является объектом, содержащимстрока и связанные с ней «атрибуты», такие как цвет, шрифт и подчеркивание.

2 голосов
/ 11 мая 2011

В вашем методе действия кнопки просто прочитайте текущее строковое значение в текстовом поле:

- (IBAction)didClickTheButton:(id)sender {

    NSString* theString = [myTextField stringValue];

    // do something with theString

}
1 голос
/ 25 января 2014

Если вы когда-либо обрабатываете только одно текстовое поле, это может быть проще:

- (void)controlTextDidChange:(NSNotification *)obj {
    [self.inputField stringValue];
}

Я полностью игнорирую все сложные детали NSText и еще много чего, и просто использую простоту уведомленияотправка и простота получения строкового значения из текстового поля.

...