2011-02-03 2 views
13

Я уже задал пару вопросов по этой теме и на самом деле не получил реального ответа о том, как это сделать (на самом деле он получил значок «Tumbleweed Badge» lol).Подключение пунктов меню в приложениях на основе документов

У меня есть приложение на основе документа (это означает, что Menu.Xib отделен от MyDocument.Xib).

Скажите, что я хочу добавить кнопку «Жирный» или кнопку «Проверить правописание» (элементы, перечисленные в Menu.xib (в разделе «Формат»> «Шрифт» и т. Д.) В MyDocument (основной интерфейс). Я не могу понять, как сделать это.

Любая помощь будет принята с благодарностью (я воздаст ответ немедленно, если он работает, это тупик меня в течение нескольких недель).

Я попытался добавить менеджер шрифтов для MyDocument.Xib и так что кнопка Bold включена, но она не отключается. Кроме того, проверка орфографии и т. д. не может быть активирована с помощью диспетчера шрифтов.

Должен быть лучший способ сделать это.

Документация Apple невероятно расплывчата.

ответ

17

Это именно то, для чего предназначен объект первого ответчика в IB. Это прокси-объект для подключения действий. Любые сообщения о действии, отправленные ему, передаются по цепочке ответчиков в первый объект, который их принимает. Для приложений на основе документов цепочка ответчиков включает текущий документ. Итак, чтобы подключить пункт меню к вашему документу:

  1. Добавьте действие к первому ответчику, если необходимо. Вы можете сделать это из окна инспектора IB.
  2. Подключите действие к первому ответчику, как если бы это был обычный объект.
  3. Внесите метод действия в документ.

Если вам необходимо добавить сообщение к первому ответчику программно, установите цель объекта nil.

+1

Когда я добавил «IBAction» в свой Document.h, я обнаружил, что он появился сразу в списке действий первого респондента MainMenu.xib. Это очень помогло, спасибо! – mtmurdock

+0

Я не уверен, почему, но, как говорит @mtmurdock, хотя IBAction был реализован суперклассом, мне нужно было определить свой метод OWN IBAction, а затем вызвать метод суперкласса. Это было для расширения NSPersistentDocument. –

+1

@CaspNZ Эти инструкции пред-Xcode 4, когда IB было отдельным приложением. Он должен отображаться автоматически. Просто переопределите метод, как обычно, и ваша версия будет вызвана, тогда вы можете назвать супер-реализацию. – ughoavgfhw