Почему установка initialFirstResponder не имеет никакого эффекта? - PullRequest
7 голосов
/ 23 августа 2011

У меня есть простая форма (NSWindow) с 3 текстовыми полями. initialFirstResponder NSWindow 'указывает' на первое поле (NSTextField). Все три текстовых поля циклически связаны друг с другом через nextKeyView.

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

Так, например, если я назову текстовые поля A, B и C и для initialFirstResponder задано значение A. Теперь, если я запускаю приложение, фокусируюсь на B и закрываю приложение, при следующем запуске я фокусируюсь будет на Б.

Почему это так и как мне это исправить?

(Извините, если это тривиальный вопрос, это мои первые шаги в какао ...)

EDIT:

Это на OS X Lion 10.7.1, Xcode 4.1.

РЕДАКТИРОВАТЬ 2:

Я нашел способ «исправить» это ... В главном окне (или в любом другом окне) файла XIB / NIB, нажмите «Инспектор атрибутов», затем снимите флажок «Восстанавливаемый». Теперь приложение не будет сохранять последнюю позицию, и, следовательно, видение initialFirstResponder будет соблюдаться и соблюдаться соответствующим образом.

1 Ответ

7 голосов
/ 23 августа 2011

Добро пожаловать в Какао!:) Я подозреваю, что это происходит как часть новых функций сохранения пользовательского интерфейса в OS X Lion.(На самом деле, я только что создал простое приложение с 3 текстовыми полями, и я тоже вижу это поведение.) Поскольку окна автоматически восстанавливают себя , вы увидите, что большая часть этого поведения происходит автоматически, даже если вы этого не сделали.реализовать это.Это, вероятно, желательно - большинство приложений будут работать таким образом, и пользователь будет ожидать этого.

Однако, если вы действительно хотите отключить его, вы, вероятно, можете сделать это, используя подклассыNSWindow или, возможно, NSTextField и переопределение -encodeRestorableStateWithCoder:.Но я определенно рекомендую оставить поведение по умолчанию в покое.


Отредактируйте с небольшой дополнительной информацией: состояние приложения, похоже, сохраняется в ~/Library/Saved Application State/com.yourapp.savedState.Там вы можете увидеть файл plist с информацией об окнах.Другие файлы не кажутся легко читаемыми, но они, вероятно, содержат информацию о том, какое поле является первым отвечающим и т. Д.

...