2015-12-02 3 views
1

Я кодирую некоторые простые приложения для Mac, чтобы узнать больше о различных темах программирования какао, а при добавлении/удалении и кодировании новых элементов меню кажется довольно прямолинейным, у меня возникают проблемы с получением моя голова вокруг большого выбора предварительно сконфигурированных пунктов меню и как правильно их использовать. (Только для обучения).Использование предварительно сконфигурированных пунктов меню Mac в xcode 7

Например, приложение Mac на основе OS X, шаблон приложения Cocoa в Xcode 7.x будет иметь довольно полное меню уже на месте. Но как вы его используете? В пункте меню App-> About отобразится окно about и Quit выйдет из приложения, но как вы используете другие?

У меня есть идея и идея, что она имеет какое-то отношение к цепочке ответчиков и текущему контексту, но я не уверен.

Я попытался поэкспериментировать с текстовым полем и обнаружил, что я могу изменить цвет шрифта выделенного текста и использовать undeline, если опция «Разрешить богатый текст» выбрана в инспекторе атрибутов. Выбор цвета можно активировать из меню приложения и, конечно же, изменить цвет текста. Но где код и как он знает, я выбрал какой-то текст? Также доступно несколько других пунктов меню, но другие отключены. Например, я не могу выделить полужирный или курсив.

Извините, если это длинный вопрос, но я не смог найти четких объяснений того, как эти предварительно сконфигурированные пункты меню работают.

Если это имеет какое-либо влияние, я использую раскадровки.

ответ

0

Как вы говорите, вопрос довольно широк, и для полного лечения потребуется больше, чем ответ SO. Но я постараюсь дать некоторые намеки (я не специалист по раскадровки, но я думаю, что это одно и то же).

Все элементы меню работают одинаково. Когда вы нажимаете на нее, запускается действие (метод с целью). Вы можете видеть это в панели инспектора соединений в IB.

Действие может быть направлено на конкретную цель, например viewController, или на общую цель, такую ​​как First Responder (== nil). При последнем приближении вызов сообщения будет следовать цепочке ответчиков через приложение, пока он не найдет кого-то, кто отвечает (или ничего).

Как вы уже отметили, некоторые варианты меню уже работают, например. Уволиться. Это связано с тем, что они предварительно подключены к действию (выход отправляет terminate: первому ответчику). Затем этот метод реализуется где-то в подклассах приложений, предоставляемых проектом, для примера terminate: реализуется одиночным тоном NSApplication, который находится в конце цепи ответчика.

Чтобы другие варианты меню работали так, как вы хотите узнать их предопределенное действие, например, Копировать отправляет copy: первому ответчику. Затем реализуйте этот метод действия в объекте в цепочке ответчиков. Для тестирования поместите их в делегат приложения, который находится ближе к концу цепочки.

Если вам нужно определенное поведение для разных окон, например, Print, поместите метод print: в каждый оконный контроллер. Первый в цепочке респондеров поймает команду, и вы получите другое поведение в зависимости от того, какое окно находится наверху.

+0

Спасибо, этот вид имеет смысл :-) – nick