Отключить / включить nsbutton, если nstextfield пусто или нет

StackOverflow https://stackoverflow.com/questions/3726201

  •  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 »файла владельца. «Текст» - это нисстринг. Я был пойман «постоянно обновленным значением». Мышление моего решения не сработало, но на самом деле это не обновлялось, так как пользователь набрал, и только когда текстовое поле потеряно.

Binding the NSTextField to the file's owner NSString text property

А теперь настроив привязки на кнопке, просто установите его включенное состояние на длину свойства текста владельца файла.

Binding the NSButton's enabled state to the text property's length

And, рабочий продукт.

enter image description here enter image description here

Если вы используете 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 для «Привязать к:», «Ключ контроллера» и «Путь ключей модели»?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top