仅在关闭当前ViewController时显示RootViewController

时间:2015-05-13 07:13:36

标签: ios objective-c uinavigationcontroller

我正在做一个没有使用任何故事板和xib的ios项目。 在这里,我提出了UIViewController的一个问题。

以下是senario:

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

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

现在在ViewControllerA内 我也有一个presentViewContollerB按钮,我只想在我解雇RootViewController时显示ViewContollerB

为了做到这一点,我需要首先解除ViewControllerA然后presentViewControllerB。我知道有一些方法可以使用委托来使它工作,但我只是想知道是否有更简单的方法来做到这一点。

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

3 个答案:

答案 0 :(得分:0)

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

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];
 }

答案 1 :(得分:0)

使用presentviewcontroller的完成块,即先执行

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

}];

如果这不起作用,请在它出现新控制器后立即写入解除

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

答案 2 :(得分:0)

还有另外一条出路,但我不知道它是否合适。

在视图控制器B中创建View Controller A类型的属性。 在呈现视图控制器B时,将视图控制器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]
}];