如何将 segue doing pop 设置为 root 并在情节提要中推送一个新的?

How to set segue doing pop to root and push a new one in storyboard?

我想制作一个使导航控制器 poptoroot 的 segue,然后将一个新控制器推入导航控制器。 例如现在控制器层次结构是

 navigationController->rootcontroller->controllerA ->controllerB

我想在控制器 B 中进行 segue perfome,并且 segue 将使层次结构变为

navigationController->rootcontroller-> controllerC

这可能吗?

你可以使用for循环弹出到root或者你想要的地方,然后用同样的方法向前推进:

// For Pop

     NSArray *viewControllers = [[self navigationController] viewControllers];
        for( int i=0;i<[viewControllers count];i++){
            id obj=[viewControllers objectAtIndex:i];
            if([obj isKindOfClass:[ViewControllerYouWantToStopOn class]]){
                [[self navigationController] popToViewController:obj animated:YES];
                return;
            }
        }

//For Push

 NSArray *viewControllers = [[self navigationController] viewControllers];
        for( int i=0;i<[viewControllers count];i++){
            id obj=[viewControllers objectAtIndex:i];
            if([obj isKindOfClass:[ViewControllerYouWantToJumpOn class]]){
                [[self navigationController] pushViewController:obj animated:YES];
                return;
            }
        }

您想将执行 pop 的 segue 设置为 root。这可以使用 Unwind Segues 来实现。有关此的更多详细信息,您可以遵循此 Apple 文档。

https://developer.apple.com/library/content/technotes/tn2298/_index.html#//apple_ref/doc/uid/DTS40013591-CH1-TNTAG2-ADDING_AN_UNWIND_SEGUE_TO_A_STORYBOARD

要推送到新的VC,你可以简单地推送故事板。

这段代码对我有用:

self.performSegue(withIdentifier: "segue_id", sender: self)
var navigationArray = self.navigationController?.viewControllers
var i = navigationArray!.count - 2
while i > 0 {
    navigationArray!.remove(at: i)
    i = i - 1
}
self.navigationController?.viewControllers = navigationArray!