Отключить / включить nsbutton, если nstextfield пусто или нет
-
03-10-2019 - |
Вопрос
Я новичок с какао. У меня есть кнопка и текстовое поле в моем приложении. Я хочу, чтобы кнопка отключена, когда текстовое поле пустое и включено, когда пользователь вводит что-то.
Любой момент начать? Любая «волшебная» привязка в интерфейсе Builder?
Спасибо
Отредактировано
Я пытался установить AppDelegate в качестве делегата NStextfield и добавил этот метод (MyTextfield и MyButton - Iboutlets):
- (void)textDidChange:(NSNotification *)aNotification
{
if ([[myTextField stringValue]length]>0) {
[myButton setEnabled: YES];
}
else {
[myButton setEnabled: NO];
}
}
Но ничего не происходит ...
Решение
Я пытался установить AppDelegate в качестве делегата NStextfield и добавил этот метод (MyTextfield и MyButton - Iboutlets):
- (void)textDidChange:(NSNotification *)aNotification { if ([[myTextField stringValue]length]>0) { [myButton setEnabled: YES]; } else { [myButton setEnabled: NO]; } }
Это тяжелый способ, но он должен работать просто хорошо. Либо вы не подключили текстовое поле delegate
выход на этот объект, вы не подключались к myTextField
выход в текстовое поле, или вы не подключались к myButton
розетка к кнопке.
Другой способ предоставить контроллеру свойство, воздающую строковое значение, свяжите текстовое поле value
Привязка к этому stringValue
Свойство и свяжите кнопку enabled
Привязка к контроллеру stringValue.length
.
Вы также можете дать контроллер два свойства, у которых есть логическое значение, и установить, что один вверх зависит от свойства String, и связывайте кнопку для этого. Это очиститель и, возможно, более надежное решение, хотя это больше работы.
Другие советы
Вот решение с использованием привязки.
Ниже я устанавливаю NStextfield, которое связано с свойством «Text« Text »файла владельца. «Текст» - это нисстринг. Я был пойман «постоянно обновленным значением». Мышление моего решения не сработало, но на самом деле это не обновлялось, так как пользователь набрал, и только когда текстовое поле потеряно.
А теперь настроив привязки на кнопке, просто установите его включенное состояние на длину свойства текста владельца файла.
And, рабочий продукт.
Если вы используете ControlTextDidChange вместо TextDidChange, вы можете избавиться от вещей уведомлений и просто полагаться на делегат Nstextfield.
Спасибо Питер. То, что я пропустил (у моего жесткого пути версии) - это код кода в ApakeFromnib в AppDelegate:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(textDidChange:) name:NSControlTextDidChangeNotification object:myTextField];
Это работает идеально. Теперь я пробую легкий способ, но боюсь, что я не все еще достаточно хорош с привязками.
Связать свойство
@property (retain) IBOutlet NSString *aStringValue;
С ценностью текстового поля того, что я должен использовать в IB для «Привязать к:», «Ключ контроллера» и «Путь ключей модели»?