我正在处理使用UITabBarController的应用程序,并且我已经为UITabBarController分配了3个ViewControllers。
我以编程方式构建此应用程序。在AppDelegate中,我创建了一个UITabBarController。然后我创建一个UINavigationController并将rootViewController设置为UITabBarController。
然后我将窗口rootViewController设置为UINavigationController
这是来自AppDelegate的代码:
let mainViewcontroller = TabBarController()
let navigationController = UINavigationController(rootViewController: mainViewcontroller)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window!.rootViewController = navigationController
self.window?.makeKeyAndVisible()
现在我创建了3个viewControllers的实例,并将它们添加到UITabBarController的viewController列表中。我现在要做的是在按钮上显示一个新的不同的viewController,它不是分配给TabBar的3个viewControllers之一。我已经能够通过使用present(ViewController)方法实现这一点:
newVC = UINavigationController(rootViewController: NewViewController())
self.present(newVC, animated: true, completion: nil)
我遇到的问题是我希望viewController显示在UITabBarController后面。当我使用上面的present()时,viewController显示在viewController和TabBar上。我尝试通过执行self.tabBarController.present()和window.rootViewController.present来呈现viewController,我得到的结果与TabBar相同。我将不胜感激任何建议。感谢
答案 0 :(得分:0)
我创建了一个自定义的Tab栏,它是我的应用程序中UITabBarController的子类。它具有以下功能来处理像您这样的情况。
UITabBarController包含其子视图控制器的数组。必需的(外部)视图控制器被替换为当前可见的视图控制器,该视图控制器位于该数组的UITabBarController的选定索引处。然后将此更新后的数组设置回UITabBarController的子视图控制器数组
func setSelectedViewController(_ externalViewController: UIViewController) {
var arrChildViewControllers = self.childViewControllers
if arrChildViewControllers.count > 0 {
let selectedTabIndex = self.selectedIndex
arrChildViewControllers.replaceSubrange(selectedTabIndex...selectedTabIndex, with: [externalViewController])
self.viewControllers = arrChildViewControllers
}
}