繁体   English   中英

仅在关闭当前ViewController时显示RootViewController

[英]Display RootViewController only when dismiss current ViewController

我正在做一个ios项目,而不使用任何故事板和xibs。 在这里,我提出了一个关于呈现UIViewController问题。

这是senario:

我的RootViewController有2个UIButton's ,可以在按下时显示ViewControllerAViewControllerB

-(IBAction)btnAclicked:(id)sender{
    [self.navigationController presentViewController:ViewControllerA];
}
-(IBAction)btnBclicked:(id)sender{
    [self.navigationController presentViewController:ViewControllerB];
}

现在在ViewControllerA我也有一个按钮来presentViewContollerB ViewControllerA ,并且我只希望在关闭ViewContollerB时显示RootViewController

为了做到这一点,我需要先关闭ViewControllerA然后再关闭presentViewControllerB 我知道有使用委托使其工作的方法,但是我只是想知道是否有更简单的方法可以做到这一点。

需要强调的是,我只想使用presentViewController ,而不要使用pushViewController 谢谢

对于您的问题,我有一个答案,只需执行以下代码,

在RootViewController.m中

 - (IBAction)gotoViewA:(id)sender
 {
    ViewControllerA  *viewControllerA = [[ViewControllerA alloc]initWithNibName:@"ViewControllerA" bundle:nil];
    [self  presentViewController:viewControllerA animated:YES completion:nil];
 }

- (IBAction)gotoViewB:(id)sender
 {
    ViewControllerB  *viewControllerB = [[ViewControllerB alloc]initWithNibName:@"ViewControllerB" bundle:nil];
    [self  presentViewController:viewControllerB animated:YES completion:nil];
 }

在ViewControllerA.m中

- (IBAction)actionBackFromA:(id)sender
 {
     [self dismissViewControllerAnimated:YES completion:nil];
 }  

在ViewControllerB.m中

 - (IBAction)actionBackFromB:(id)sender
 {
    [self dismissViewControllerAnimated:YES completion:nil];
 }

使用presentviewcontroller的完成块,viz将首先执行

[self presentViewController:goTo_B animated:YES completion:^{
     //Dismiss A
     [self dismissViewControllerAnimated:YES completion:nil];

}];

如果这不起作用,请写dismiss,并在出现新控制器之后

 [self dismissViewControllerAnimated:YES completion:nil];  
 [self.view.window.rootViewController presentViewController:goTo_B animated:YES completion:^{ }]; 

还有另一种方法,但是我不知道它是否合适。

在视图控制器B中创建类型为View Controller A的属性。在显示视图控制器B时,将View Controller A的实例分配给视图控制器B中的属性。

[self presentViewController:goTo_B animated:YES completion:^{     
goTo_B.propertyOfViewControllerA = self;
}];

之后,关闭视图控制器B时,您可以执行以下两个操作之一:

[self dismissViewControllerAnimated:YES completion:nil];
[propertyOfViewControllerA dismissViewControllerAnimated:YES completion:nil]

要么

    [self dismissViewControllerAnimated:YES completion:^{
 [propertyOfViewControllerA dismissViewControllerAnimated:YES completion:nil]
}];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM