Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在swift中从uiview访问选项卡栏_Swift_Uiview_Tabbar - Fatal编程技术网

在swift中从uiview访问选项卡栏

在swift中从uiview访问选项卡栏,swift,uiview,tabbar,Swift,Uiview,Tabbar,在我的应用程序中,当我收到任何通知时,我会显示一个customView。如果用户触摸屏幕上的任何地方,视图就会消失。我有一个带有四个选项卡的uitabar。收到通知后,当我单击视图时,应选择第二个选项卡(我可能在应用程序中的任何位置)。但我无法选择第二个选项卡。它总是打开第一个选项卡。如何从这个customView中调用“didSelect项”?下面是我的代码。请验证并帮助我解决问题 我的代码是: { let storyBoard = UIStoryboard(name: "Main",

在我的应用程序中,当我收到任何通知时,我会显示一个customView。如果用户触摸屏幕上的任何地方,视图就会消失。我有一个带有四个选项卡的
uitabar
。收到通知后,当我单击视图时,应选择第二个选项卡(我可能在应用程序中的任何位置)。但我无法选择第二个选项卡。它总是打开第一个选项卡。如何从这个customView中调用“didSelect项”?下面是我的代码。请验证并帮助我解决问题

我的代码是:

{
    let storyBoard = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainTabbarView") as? MainTabbarView
    storyBoard?.selectItem(withIndex: 3)  
} 
func selectItem(withIndex index: Int) {
    if let controller = tabBarController, let tabBar = tabBarController?.tabBar, let items = tabBarController?.tabBar.items {
        guard index < items.count else { return }
        controller.selectedIndex = index
        controller.tabBar(tabBar, didSelect: items[index])
    }
} 

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    if let items = tabBar.items {
        items.enumerated().forEach { if $1 == item { print("your index is: \($0)") } }
    }
}
在我的UITabBarController中,我编写了以下代码:

{
    let storyBoard = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainTabbarView") as? MainTabbarView
    storyBoard?.selectItem(withIndex: 3)  
} 
func selectItem(withIndex index: Int) {
    if let controller = tabBarController, let tabBar = tabBarController?.tabBar, let items = tabBarController?.tabBar.items {
        guard index < items.count else { return }
        controller.selectedIndex = index
        controller.tabBar(tabBar, didSelect: items[index])
    }
} 

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    if let items = tabBar.items {
        items.enumerated().forEach { if $1 == item { print("your index is: \($0)") } }
    }
}
func selectItem(带索引:Int){
如果let controller=tabBarController,则让tabBar=tabBarController?.tabBar,让items=tabBarController?.tabBar.items{
保护索引
根据您的代码,您正在初始化TabBarController的一个新实例,而不是使用活动实例,因此它实际上不会更新当前的选项卡栏。您可以访问tabBarController拥有的视图控制器。然后从那里:

activeViewController.tabBarController.selectedIndex = 1

应该可以了。

谢谢您的回复。我可以写下面的代码吗?var topVC=UIApplication.shared.keyWindow?.rootViewController而((topVC!.presentedViewController)!=nil){topVC=topVC!.presentedViewController}topVC?.tabBarController?.selectedIndex=2是的,只要tabBarController和视图控制器设置正确,就可以尝试,这应该行得通。