提问人:Async- 提问时间:7/5/2019 最后编辑:Sohil R. MemonAsync- 更新时间:7/5/2019 访问量:112
使用 TabBarViewController 呈现 NavigationController 无法以编程方式选择索引
Presenting NavigationController with TabBarViewController can not select index programmatically
问:
我正在尝试显示 NavigationController 并选择完成块中的第二个选项卡。我的代码是:
let chatViewController = UITabBarController()
let navigationController = UINavigationController(rootViewController: chatViewController)
present(navigationController, animated: true, completion: {
self.visibleViewController = navigationController
self.visibleViewController?.tabBarController?.selectedIndex = 1
})
第二次尝试:
let chatViewController = UITabBarController()
let navigationController = UINavigationController(rootViewController: chatViewController)
navigationController.tabBarController?.selectedIndex = 1
present(navigationController, animated: true, completion: {
self.visibleViewController = navigationController
})
在这两种情况下,tabBarController 都是 nil。如何切换到不同的选项卡?
答:
1赞
kstefanou
7/5/2019
#1
而不是打电话
present(navigationController, animated: true, completion: { })
在 中,尝试将其调入或viewDidLoad
viewWillAppear
viewDidAppear
3赞
Sohil R. Memon
7/5/2019
#2
您正在尝试访问 ,但您需要访问第一个控制器,并且从那里您需要以这种方式进行选择:UITabBarController
UINavigationController
UINavigationController
UITabBar
func showTabBarControllerr() {
let chatViewController = UITabBarController()
//Note: Make sure you have already added the Controllers in Tabbarcontroller
chatViewController.viewControllers = [DemoOne(), DemoTwo()]
let navigationController = UINavigationController(rootViewController: chatViewController)
present(navigationController, animated: true, completion: {
if let tabBarController = navigationController.viewControllers.first as? UITabBarController {
tabBarController.selectedIndex = 1
}
})
}
让我知道这有帮助与否!
评论
0赞
Async-
7/5/2019
我实际上使用的是聊天视图控制器的 viewControllers,但它是用工厂制作的并传回这里(出于显而易见的原因,我简化了问题片段)。我怎样才能访问这里?chatViewController.viewControllers
0赞
Sohil R. Memon
7/5/2019
@Async- 我分配了它,因为我正在以编程方式创建 。以防万一,如果你的“ChatViewController”由控制器组成,那么你不需要分配它!您可以跳过该行。UIViewController
0赞
Async-
7/5/2019
它更复杂,因为我使用工厂,但我认为总的来说你的答案是正确的。
0赞
Frank Eno
7/5/2019
#3
试试这个 (Swift 5):
在 Storyboard 中为 UITabBarController 设置标识符,如下所示
MainTabBar
在函数或 IBAction 中,使用以下代码:
让 TBC = 情节提要?。instantiateViewController(withIdentifier: “MainTabBar”) 作为!UITabBar控制器
tbc.selectedIndex = 1 // 这是控制器的索引
present(tbc, 动画:false,完成:nil)
评论
UITabBarController
DispatchQueue.main.async {...}