Если я правильно понимаю вашу иерархию, у вас есть контроллер панели вкладок, в котором есть контроллеры навигации. Таким образом, в основном любая из вкладок может нажимать дополнительные контроллеры представления, а панель вкладок по-прежнему видна.
Теперь вы хотите добавить какой-то новый контроллер в текущий выбранный контроллер представления на панели вкладок, и вы хотите сделать это из другой части приложения, другого контроллера представления, который не имеет отношения к панели вкладок.
Самый быстрый способ сделать это — открыть статический экземпляр контроллера представления панели вкладок. Это будет работать только в том случае, если в вашем приложении всегда есть только 1 контроллер панели вкладок (вероятно, 99% приложений).
Сначала добавьте текущий экземпляр в контроллер представления панели вкладок:
class MyTabBarViewController: UITabBarController {
static private(set) var currentInstance: MyTabBarViewController?
override func viewDidLoad() {
super.viewDidLoad()
MyTabBarViewController.currentInstance = self
}
}
Поэтому, когда представление загружается, присваивается статическое значение, и теперь к нему можно получить доступ в любом месте вашего проекта через MyTabBarViewController.currentInstance
.
Остальное — это просто доступ к текущему выбранному контроллеру представления и нажатие нового контроллера представления. Что-то вроде этого должно делать:
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "PrintMainViewController")
(MyTabBarViewController.currentInstance?.selectedViewController as? UINavigationController)?.pushViewController(controller, animated: true)
person
Matic Oblak
schedule
04.04.2019
PrintMainViewController
является подклассом контроллера панели вкладок? Строкаself.tabBarController?.tabBar.isHidden = false
, скорее всего, абсолютно ничего не сделает в вашем коде, так какself.tabBarController
этоnil
, если это тот же контроллер представления, что и в первом фрагменте. Если что, попробуй(controller as! UITabBarController).tabBar.isHidden = false
. Если он дает сбой, то этот контроллер не является подклассом контроллера панели вкладок. - person Matic Oblak   schedule 04.04.2019