Ответ 1
Вы можете установить делегат для своего экземпляра NSTextField
и предоставить делегату следующий метод:
- (void)controlTextDidChange:(NSNotification *)notification {
// there was a text change in some control
}
Ваш объект-делегат может быть делегатом приложения, контроллером окон, контроллером представления или другим объектом в вашем приложении. Делегат может быть программно установлен через
[myTextField setDelegate:delegateObject];
или в интерфейсе Builder через выход delegate
, доступный в элементе управления NSTextField
.
Обратите внимание: если несколько элементов управления подключены к одному и тому же делегату, тогда для каждого элемента управления будет отправляться -controlTextDidChange:
, то есть тот же метод вызывается для разных элементов управления. Если вам требуется другое поведение в соответствии с элементом управления, где текст был изменен, вы можете использовать -[NSNotification object]
для идентификации элемента управления, отправившего уведомление.
Например, если у вас есть два текстовых поля с соответствующими выводами nameField
и addressField
, и вы установили один и тот же делегат для обоих полей, тогда:
- (void)controlTextDidChange:(NSNotification *)notification {
// there was a text change in some control
// [notification object] points to the control that has sent
// the notification
if ([notification object] == nameField) {
// nameField has changed
}
else if ([notification object] == addressField) {
// addressField has changed
}
}
Кроме того, у вас может быть один делегат для каждого текстового поля. В этом случае нет необходимости тестировать [notification object]
.