2017-08-04 114 views
1

我有两个导航视图控制器。当我点击属于第二个导航控制器的ViewController中的一个按钮时,我想关闭该导航控制器的完整视图控制器堆栈,并且想要转到第一个导航中的视图控制器控制器。我该怎么做?我试过[self.navigationController dismissViewControllerAnimated:YES completion:nil];,似乎没有发生。怎么做?如何在导航视图控制器中关闭整个视图控制器堆栈?

+0

为什么你有两个导航控制器?他们如何相互关联? –

+0

我想你可以设置self.navigationController.viewControllers = @ [],然后推动什么需要。我不知道你是否想要动画。 – TomCobo

+0

@AndréSlotta他们互不相关 –

回答

1

的错误一定在别处。您描述的代码正在使用确实有效。我创建了一个新项目,并提出一个非常简单的例子:

#import "ViewController.h" 

@interface MyViewController : UIViewController 
- (instancetype)initWithColor:(UIColor *)color; 
@end 


@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    [self presentViewController:[[UINavigationController alloc] initWithRootViewController:[[MyViewController alloc] initWithColor:[UIColor redColor]]] animated:YES completion:nil]; 
} 

@end 



@implementation MyViewController 

- (instancetype)initWithColor:(UIColor *)color { 
    if((self = [super init])) { 
     self.view.backgroundColor = color; 
    } 
    return self; 
} 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    CGPoint point = [touches.anyObject locationInView:nil]; 
    if(point.x < self.view.frame.size.width*0.5 && point.y < self.view.frame.size.width*0.5) { 
     [self.navigationController pushViewController:[[MyViewController alloc] initWithColor:self.view.backgroundColor] animated:YES]; 
    } else if(point.x > self.view.frame.size.width*0.5 && point.y < self.view.frame.size.width*0.5) { 
     [self.navigationController presentViewController:[[UINavigationController alloc] initWithRootViewController:[[MyViewController alloc] initWithColor:[UIColor greenColor]]] animated:YES completion:nil]; 
    } else if(point.x < self.view.frame.size.width*0.5 && point.y > self.view.frame.size.width*0.5) { 
     [self.navigationController popViewControllerAnimated:true]; 
    } else if(point.x > self.view.frame.size.width*0.5 && point.y > self.view.frame.size.width*0.5) { 
     [self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
    } 
} 

@end 

如果复制到一个新的项目,其中ViewController是您的主视图控制器导航控制器将创建并呈现在视图没有出现在此。背景是红色的。

通过按屏幕的左上部分,相同颜色的新控制器将被推送到当前顶部导航控制器。

按右上角的按钮,新的导航控制器将显示绿色视图控制器。

按下左下方可以弹出当前视图控制器(如果有)。

然后按右下角将关闭顶部的导航控制器。

因此,您的情况是按左上角几次来在单个导航控制器上生成一堆视图控制器。然后按右上方显示另一个导航控制器(绿色)。按左上角几次,在绿色导航控制器上创建一堆视图控制器。现在按右下角关闭整个绿色堆栈并返回红色导航控制器堆栈。

检查你的代码多一点,看看你的情况是怎么回事,你为什么遇到问题在你的情况。首先检查self.navigationController是否为零。

-2

试试这个,我认为你的作品

self.navigationController?.popToRootViewController(animated: true) 
+0

你是否看到这个问题'我有两个导航视图控制器' –

+0

Mitul,这不会工作,因为我想要显示的视图控制器位于另一个导航视图控制器中。 –

+0

let storyboard = UIStoryboard.init(name:“storyboardname”,bundle:nil) mainNavVC = storyboard.instantiateViewController(withIdentifier:“navigationcontrollername”)as! UINavigationController mainNavVC。setNavigationBarHidden(true,animated:false) mainNavVC.setViewControllers([viewcontrollername],animated:true) self.window?.rootViewController = mainNavVC –

相关问题