Вы можете установить делегат для своего экземпляра NSTextField
, и делегат может реализовать следующий метод:
- (void)controlTextDidChange:(NSNotification *)notification {
// there was a text change in some control
}
Ваш объект делегата может быть делегатом приложения, контроллером окна, контроллером представления или некоторым другим объектом в вашем приложении. Делегат может быть установлен программно через
[myTextField setDelegate:delegateObject];
или, в Интерфейсном Разработчике, через выход 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]
.