2014-12-18 8 views
0

У меня есть этот OSX раскадровка-приложение, которое начинается с NSSplitViewController, как это:Создания выхода для NSProgressIndicator внутри NSToolbar

enter image description here

Это splitViewController имеет два viewControllers: мастер и подробно.

Внутри окна у меня есть NSToolbar. Я перетащил NSProgressIndicator на ту панель инструментов, а Xcode встроил ее в NSToolbarItem.

Теперь мне нужно создать выход (не действие, как описано в других вопросах stackoverflow) от NSProgressIndicator до некоторого класса. Первый вопрос: какой?

Xcode не позволит создать розетку. Я пробовал эти варианты:

  1. тащили из ToolbarItem в masterController файл класса, файл класса detailController и в NSSplitViewController классе.
  2. перетаскивается из ToolbarItem в класс делегата.
  3. перетащил из NSProgressIndicator в masterController файл класса, detailController класс файла и до NSSplitViewController класс.
  4. перетаскивается из класса NSProgressIndicator в класс делегата.
  5. перетаскивается из NSToolbarItem и от NSProgressIndicator к первому ответчику диспетчера окон.

Во всех случаях перетаскивание не создает окна, которые позволят мне создать розетку.

В первую очередь, как создать такую ​​розетку? На какой класс я перетащил его и как это сделать?

ответ

4

Я предполагаю, ваша установка больше похожа на изображение:

BasicCocoaAppWithSplitviewAndToolBar

Ваше окно сцены поддерживается, по умолчанию, с помощью NSWindowController, к которому вы не можете добавлять новые рынки сбыта. Вам нужно создать подкласс этого, связать его с вашим окном, а затем вы сможете создавать в нем точки.

Файл> Новый файл> Класс какао Укажите имя, подобное «SpaceDogsWindowController», в качестве подкласса NSWindowController.

Затем используйте значок окна контроллера (синий круг) и выберите Инспектор удостоверений в Xcode. (Ctrl + Alt + 3). Укажите имя нового класса в поле «Класс».

Затем попробуйте Подвод выхода:

1) Показать помощник редактора

2) Используйте шкалу перехода, чтобы обеспечить пользовательский класс виден (это в верхней части помощника редактора панели, его должен сказать «Автоматически», и вы можете нажать, чтобы выбрать свой новый класс, если он говорит «Руководство», измените его на «Автоматически»).

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

Затем можно изменить этот индикатор прогресса с другими контроллерами зрения, которые являются потомками зрения иерархии этого окна, используя такой код:

if let windowController = self.view.window?.windowController() as? CustomWindowController { 
     windowController.progressIndicator.doubleValue = 0.4 
    } 

или, в Objective-C, что-то вроде этого:

CustomWindowController *myWindowControllerSubclass = self.view.window.windowController; 
    windowController.progressIndicator.doubleValue = 0.4; 

Надеюсь, что это поможет.

+0

AHA !!!!!! ИДЕАЛЬНО! но как я могу получить доступ к этой розетке от главных или дополнительных контроллеров? Извините за вопросы, но я очень новичок в приложениях для какао. Это мое первое приложение для какао, которое включает в себя этот уровень сложности и первый также с раскадрой. – SpaceDog

+0

СОВЕРШЕННО, СОВЕРШЕННО, СОВЕРШЕННО И СОВЕРШЕННО !!!!!!! БЛАГОДАРЯ!!!! – SpaceDog

+0

Если элемент управления генерирует действие, действие обычно помещается в контроллер представления (или окна), которому он принадлежит. Ваш индикатор прогресса находится на панели инструментов, которая принадлежит окну, поэтому его действия обычно будут проходить в этом контроллере Windows. Если им нужно позвонить в другое место, вам необходимо подключить их, используя прямые вызовы, делегирование, уведомления или какой-либо другой метод, который связывается между контроллерами. Прямым вызовом из окна может быть «self.contentViewController.splitViewController.splitViewItems [0] .myFuncOrProperty», но вы добавите typecasting. – Woodster

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

  • Нет связанных вопросов^_^