Возможно, это поздний ответ, но я все равно отправлю свое решение. Надеюсь, это поможет кому-то.
Я встроил NSTabViewController в ContainerView. Тогда, чтобы не видеть сверху вкладки я сделал это:
перейти к NSTabViewController в раскадровке
в стиле изменения атрибутов инспектора быть выбрано
затем нажмите на TabView в Tab Bar View Controller, и набор стилей, чтобы быть "tabless" see image here
После т его вам нужно:
- магазин tabViewController ссылка на mainViewController для того, чтобы выбрать вкладки из кода
- добавить кнопку mainViewController (где ваш контейнер есть), с которым вы будете менять вкладки в tabViewController.
Вы делаете это, сохраняя ссылку на tabViewController при переопределении подготовки к функции segue. Вот мой код:
сначала добавить свойство к mainViewController
private weak var tabViewController: NSTabViewController?
затем переопределить эту функцию и сохранить ссылку на tabViewController:
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
guard let tabViewController = segue.destinationController
as? NSTabViewController else { return }
**self.tabViewController = tabViewController as? NSTabViewController**
}
После этого вы будете иметь ссылку на tabViewController весь набор вверх. Следующих (последнее), что вам нужно сделать, это действие для кнопки, чтобы перейти к первому (или второму) контроллеру представления, как это:
@IBAction func changeToSecondTab(_ sender: Any) {
self.tabViewController?.selectedTabViewItemIndex = 0 // or 1 for second VC
}
Все самое лучшее!
Спасибо @Wes за ваш подробный ответ! У меня ошибка в строке 'self.container.addSubview (vc1.view)': »В представлении контейнера есть непредвиденные подпункты«. Поэтому я попытался удалить все подзапросы (как вы делали в вашем func 'switchViews' сначала, но это не сработало (ошибка остается прежней). Любые идеи? – ixany
@ixany несколько вещей. Во-первых, измените свой код, чтобы отразить редактирование, которое я сделал (небольшие изменения, чтобы предотвратить запутывающие представления). Также удалите взаимосвязь вставки между 'Container' и' ViewController1'. Сделайте это, щелкнув правой кнопкой мыши 'Container' в IB и удалив соединение. – Wes
Еще раз спасибо @Wes! были правы, мне пришлось удалить embed/segue в 'ViewController1' в IB. Я принял ваш ответ, но у вас есть еще один вопрос: добавляет ли и снимает ли subviews для этой задачи наилучшую практику? При ее реализации я также нашел' .removeChildViewController() 'и подумал, что это может быть лучше с точки зрения производительности. В subview-решении приложение загружает все возможные VC, даже когда они никогда не появятся. Существуют ли другие преимущества добавления/удаления subviews? – ixany