Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Ios 4个选项卡的选项卡栏控制器中的同一视图控制器给出了错误的选定选项卡控制器选定索引_Ios_Swift_Tabs_Tabbarcontroller - Fatal编程技术网

Ios 4个选项卡的选项卡栏控制器中的同一视图控制器给出了错误的选定选项卡控制器选定索引

Ios 4个选项卡的选项卡栏控制器中的同一视图控制器给出了错误的选定选项卡控制器选定索引,ios,swift,tabs,tabbarcontroller,Ios,Swift,Tabs,Tabbarcontroller,我正在尝试为我的应用程序制作模板。。。假设我的应用程序加载相同的视图控制器,该控制器具有用于4个选项卡的CollectionView。根据所选索引,我必须将内容加载到集合视图中。我正在从Appdelegate手动设置选项卡栏。我的问题是,这是否可能类似于一次为Tabbarcontroller的所有4个选项卡实例化相同的viewcntroller。如果是,我如何正确知道选择了哪个索引 Appdelegate中tabBarcontroller的代码 self.wind

我正在尝试为我的应用程序制作模板。。。假设我的应用程序加载相同的视图控制器,该控制器具有用于4个选项卡的CollectionView。根据所选索引,我必须将内容加载到集合视图中。我正在从Appdelegate手动设置选项卡栏。我的问题是,这是否可能类似于一次为Tabbarcontroller的所有4个选项卡实例化相同的viewcntroller。如果是,我如何正确知道选择了哪个索引

Appdelegate中tabBarcontroller的代码

                self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
                let tabBarController = UITabBarController()

                let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

                let firstImage = UIImage(named: "image1")
                let secondImage = UIImage(named: "image2")
                var controllers = [UIViewController]()
                for var i = 0; i < self.myList.count; i++ {

                 let vc : ViewControllerTwo = storyboard.instantiateViewControllerWithIdentifier("view1") as! ViewControllerTwo

                    if(i == 0 || i == 3)
                    {
                        vc.tabBarItem = UITabBarItem(
                            title: self.myList[i],
                            image: firstImage,
                            tag: i)
                        controllers.append(vc)
                    }
                    else
                    {
                        vc.tabBarItem = UITabBarItem(
                            title: self.myList[i],
                            image: secondImage,
                            tag: i)
                        controllers.append(vc)
                    }


                }


                self.tabBarController.viewControllers = controllers
                self.window?.rootViewController = self.tabBarController


                self.self.window?.rootViewController = self.tabBarController
                self.window?.makeKeyAndVisible()
self.window=UIWindow(框架:UIScreen.mainScreen().bounds)
设tabBarController=UITabBarController()
让故事板:UIStoryboard=UIStoryboard(名称:“Main”,bundle:nil)
让firstImage=UIImage(名为:“image1”)
让secondImage=UIImage(名为:“image2”)
变量控制器=[UIViewController]()
对于var i=0;i
如果您将类设置为选项卡栏控制器的代理,则会调用
didSelectViewController
delegate方法。然后,您可以使用
控制器
数组来确定索引

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let tabBarController = UITabBarController()
tabBarController.delegate = self


func tabBarController(_ tabBarController: UITabBarController,
   didSelectViewController viewController: UIViewController) {

    if let index = self.controllers.indexOf(viewController) {
        // Do something with index
    }
}

我想我使用了一个带有NSTimer的方法解决了这个问题,因为有时更改和获取状态会给出错误的状态,如这里所述。您应该将您的类设置为选项卡栏控制器的委托,然后您将得到对
didSelectViewController
的调用。您可以将所选视图控制器与
控制器
数组进行比较,以确定所选视图控制器的索引您不需要NSTimer,除非您做错了…@Paulw11..您可以提供一些示例代码吗?用于什么?你的问题是什么还不清楚。