2009-07-30 4 views
0

Я разрабатываю приложение в какао. Теперь я столкнулся с критической проблемой. Я не могу скрыть элементы управления NSButton в NSView. Я использовал следующий код:Не удается скрыть элементы управления в NSView

[btn setHidden:YES] 

но этот контроль «btn» не скрывается. Я использовал следующий код, чтобы проверить, скрыта ли кнопка.

[btn isHidden] 

, но это возвращение ДА. Также я не могу отправить значение в поле NSTextfield при показе этого представления.

Заранее спасибо.

ответ

1

Пожалуйста, попробуйте запустить runloop сразу после скрытия кнопки:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
+0

Спасибо, это сработало для меня на NSProgressIndicator, который отказался скрывать, вместо 1 секунды я использовал 0.02, который, похоже, очистил его. Не знаю, почему displayIfNeeded, setNeedsDisplay и т. Д. Не заставили его. Обычно это скрывается в другом месте моего приложения без этого. – GeoffCoope

+1

Вы также можете использовать '[NSDate remotePast]', чтобы runloop запускался только один раз. – diederikh

1

Не зная, что еще происходит в приложении, трудно понять, почему это не будет делать скрытой кнопкой.

Заблокирован ли основной цикл событий таким образом, чтобы события обновления не обрабатывались? Как правило, это не очень хорошо.

Одна вещь, которую вы можете сделать для принудительного немедленного обновления, - вызвать displayIfNeeded на кнопке или ее родительском представлении или окне. Это должно привести к тому, что представление будет перерисовано. Это было бы подходящим в качестве эксперимента для проверки того, что кнопка будет рисовать (или не рисовать) правильное состояние. Если вызов displayIfNeeded вызывает его исчезновение, вам нужно будет определить, почему события обновления не обрабатываются правильно.

Смежные вопросы