У меня есть базовое приложение Cocoa, чтобы опробовать Swift и Storyboards.Xcode OS X Storiesboards: Как получить ссылку на верхний уровень «оконный контент»?
Приложение состоит из 3 основных видов, которыми управляет NSTabViewController
, что снова связано с отношением «содержимое окна» главного окна.
Я добавил NSSegmentedControl
на панель инструментов окна, чтобы переключаться между 3-мя вкладками.
В контроллере главного окна я добавил метод действия для элемента панели инструментов, чтобы переключаться между вкладками, но я не могу понять, как получить ссылку на контроллер представления табуляции, чтобы фактически переключать вкладки.
Я попытался добавить свой метод действий в контроллер представления табуляции, но это не работает, потому что контроллер представления табуляции может не находиться в цепочке ответчиков, если он содержит пустой вид (это ошибка?).
Как обходной путь, я перевернул viewDidAppear() в контроллере представления вкладок. Там я получаю дескриптор view.window.windowController и устанавливаю ссылку на «self» в переменной экземпляра. Это работает, но не кажется правильным. Должен быть способ получить от контроллера окна до его контроллера содержимого ...
Контроллеры окон и контроллеров виджетов живут в разных сценах, и я не могу их подключить через IBOutlet. Кроме того, ни один из методов segue не вызывается в оконном контроллере для отношения «содержимое окна».
Спасибо за ваш ответ. Моя проблема в том, что контроллер представления табуляции, который реализует действие, не находится в цепочке ответчиков, если действие инициируется элементом панели инструментов. Кроме того, мне не удалось выяснить, как подключать выходы к сценариям просмотра (простое представление мастера/детали). Пока я вернулся к простым старым файлам nib. – Mark
Это kludge, но я реализую IBAction в своем WindowController и передаю его. У меня была аналогичная ситуация с SplitViews. Если вы поместите IBAction в ViewController, это будет вызвано только в том случае, если ViewController находится в фокусе. –
Вы не подключаете выходы через сцены в раскадровке, насколько я могу судить. Контроллер, который владеет дополнительным контроллером, передает все данные, которые ему нужно передать через «prepareForSegue», а затем вы передаете свои данные через другие механизмы, такие как уведомления или делегаты.(Я новичок в раскадровки, я только занимался iOS, и Hillegass не верит в них, так что только сейчас я их пробую) –