[英]Display RootViewController only when dismiss current ViewController
我正在做一个ios项目,而不使用任何故事板和xibs。 在这里,我提出了一个关于呈现UIViewController
问题。
这是senario:
我的RootViewController有2个UIButton's
,可以在按下时显示ViewControllerA
和ViewControllerB
。
-(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.