2012-03-21 2 views
0

Я разрабатываю приложение для какао, основанное на документе. Интерфейс запуска моделируется после GarageBand: отображается экран приветствия, в котором отображается одно из двух чередующихся представлений (переключается через сегментированный элемент управления): «Создать новый проект» и «Обзор последних проектов». Каждое из этих представлений контролируется специальным NSViewController (в данном случае NewProjectViewController и RecentProjectsViewController).NSTextField не принимает вход после отображения один раз

Для этого я подклассифицировал NSDocumentController, чтобы показать этот «экран приветствия» при запуске вместо создания пустого документа (пустой документ не имеет смысла в моем приложении, пока пользователь не определит определенные минимальные настройки).

После запуска/создания исходного документа, если пользователь выбирает «Создать новый проект ...» (т. Е. Новый документ), я показываю окно, которое повторно использует тот же интерфейс, что и вкладка «Новый проект» на экране приветствия , создав экземпляр того же NewProjectViewController и добавив его вид в окно.

В обоих случаях вид контроллера просмотра создается из .xib. Сам контроллер представления запрограммирован программно, и его представление добавляется к существующему подзону окна с использованием -addSubview :.

Представление для NewProjectViewController содержит несколько редактируемых экземпляров NSTextField и другие элементы управления.

Проблема: Все экземпляры NSTextField в представлении контроллера вида будут принимать ввод текста только в первый раз; Во второй раз, когда отображается представление, попытка отредактировать текст вызовет звук системного предупреждения. Текст может быть выбран (выделен), но не изменен. Кроме того, текст может быть изменен программно.

Другие элементы управления (всплывающие кнопки) могут быть изменены без проблем.

Я попытался показать окно «Новый документ» с самого начала (вместо экрана приветствия), но результат тот же: в первый раз он работает, а второй - нет.

Это проблема первого ответчика?

+0

также , используя 10.6 Snow Leopard. –

ответ

0

ОК, я исправил его (хотя я до сих пор точно не знаю, почему он не работал).

Я изменил оба приглашения (экран «Добро пожаловать» и «Новый проект») для запуска в виде модальных окон.

Окно «Добро пожаловать» - [NSApp abortModal] на «Quit» и - [NSApp stopModal] на «Выбрать». Окно «Новый проект» вызывает [NSApp abortModal] на «Отмена» и - [NSApp stopModal] на «Создать».

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

+0

На самом деле, с точки зрения дизайна, модальные окна имеют больше смысла, чем то, что я делал раньше. –

+0

Мне все еще хотелось бы узнать, в каких сценариях NSTextField подает звуковой сигнал системного предупреждения. Это помогло бы диагнозу. Я искал везде безрезультатно ... –

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