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
Ios 是否更改为其他选项卡中的视图控制器?_Ios_Swift_Uitabbarcontroller - Fatal编程技术网

Ios 是否更改为其他选项卡中的视图控制器?

Ios 是否更改为其他选项卡中的视图控制器?,ios,swift,uitabbarcontroller,Ios,Swift,Uitabbarcontroller,我正在尝试转换到一个不是根VC的VC @IBAction func composeJournalTapped(sender: AnyObject) { self.tabBarController?.selectedIndex = 2 let journalVC = self.storyboard?.instantiateViewControllerWithIdentifier("JournalEntryTableViewController") as! JournalEntry

我正在尝试转换到一个不是根VC的VC

@IBAction func composeJournalTapped(sender: AnyObject) {
    self.tabBarController?.selectedIndex = 2

    let journalVC = self.storyboard?.instantiateViewControllerWithIdentifier("JournalEntryTableViewController") as! JournalEntryTableViewController

    self.navigationController?.pushViewController(journalVC, animated: true)


}

我知道最明显的答案是向VC发送推送序列,但这不会切换标签。我想切换选项卡,并切换到该选项卡中不是根的viewController。上面的代码严格地切换选项卡。换句话说,我想从索引1切换到索引2,然后将segue从索引2 rootVC推到destinationVC。

所以您需要实现所需的代码。如果选项卡栏控制器中的第二个选项卡是导航控制器,请将其转换为适当的类型,并实现一个界面,使您能够显示适当的视图控制器


我不能告诉你如何做的细节,因为我不知道你的应用程序的结构。有问题的VC是否已经在选项卡2的导航堆栈上?它是否总是不在堆栈上,所以推送序列是正确的做法?两种情况都有可能吗?您需要绘制案例和处理所有可能案例的设计代码。

目标视图控制器是目标选项卡导航堆栈上的第二个VC。它将永远在那里。实例化destinationVC会将其从导航堆栈中移除,这不是我想要的。因此,请先让iAction将选项卡栏控制器的selectedIndex转换为所需的索引,然后获取指向该选项卡的视图控制器(导航控制器)的指针,将其转换为适当的类型,并使用对“popToViewController:animated”的调用弹出堆栈上的该视图控制器。@iAction func composeJournalTapped(发件人:AnyObject){self.tabBarController?.selectedIndex=2 self.navigationController!.popToViewController(navigationController!.ViewController[2]as!JournalEntryTableViewController,动画:false)}这会导致崩溃…索引超出范围假设索引2处的选项卡包含导航控制器,并且该控制器是您要弹出的,您需要告诉该导航控制器弹出,而不是self.navigationController。