NSTextField setEnabled - PullRequest
       2

NSTextField setEnabled

0 голосов
/ 16 февраля 2010

В моем окне есть объект NSTextField, который должен быть отключен при нажатии флажка.

Я написал IBAction для получения флажка, установил флажок и отключил / включил текстовое поле, основанное на состоянии флажка.

[mName setEnabled: [mNameCheck state]];

Это прекрасно работает с основными функциями, но я обнаружил странное поведение.

Вы обновляете некоторые детали в текстовом поле и устанавливаете флажок, чтобы текстовое поле получало отключенный старый контент.

Пример:

  • Этап 1: текстовое поле содержит содержимое "Название"
  • Этап 2: обновление текстового поля содержание как "Гириш"
  • Этап 3: установите флажок (чтобы отключить текст подан)
  • Этап 4: текстовое поле отключается с помощью содержание как "Имя"

Проблема будет решена, если я оставлю ответчик и установлю ответчик на какой-либо другой контроллер, прежде чем текстовое поле будет отключено.

В моем случае я не могу присвоить респонденту флажок (он не принимает) или любой другой контроллер, поэтому я сделал что-то вроде ниже, который работает нормально

[mName resignFirstResponder];
[mName becomeFirstResponder];

подать в отставку и назначить ответчик с тем же контроллером.

Мне просто интересно, правильное ли это решение или какое-либо лучшее решение этой проблемы?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2010

Как указано в документе, НЕ звоните -resignFirstResponder или -becomeFirstResponder напрямую. Позвоните -[NSWindow makeFirstResponder:] вместо этого. Допустимо передать значение nil, и статус перейдет к самому окну.

Вы можете попробовать позвонить -[NSWindow selectNextKeyView:], хотя я не совсем уверен, что произойдет, если он не найдет правильное представление следующего ключа. Попробуйте и посмотрите. Если это не сработает, вам придется самим позвонить -nextValidKeyView и -makeFirstResponder.

0 голосов
/ 17 февраля 2010

Если вы установите для текстового поля значение Непрерывное в Интерфейсном Разработчике, значение поля будет установлено, как только в поле будет сделано изменение, а не когда оно потеряет фокус. Вы можете программно установить это значение с помощью [yourTextField setContinuous:YES].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...