让UINavigationController自动适应它的呈现方式

时间:2011-10-19 02:29:58

标签: iphone view uiviewcontroller uinavigationcontroller

我正在开发一个视图控制器,可以模态显示或推送到导航堆栈中。我把它设为UINavigationController子类,以便我免费获得所有UIToolbar个东西。我可以使用以下方式呈现它:

[self presentModalViewController:myViewController animated:YES];

问题是,UINavigationController不允许将另一个UINavigationController推入其中(有意义),因此会崩溃:

[self.navigationController pushViewController:myViewController animated:YES];

是否有办法检测myViewController的显示方式,并自动让它在UINavigationControllerUIViewController之间切换,以便我不需要2个不同的类?

换句话说,myViewController将能够检测它是如何呈现的,并推送它将归结为:

[self.navigationController pushViewController:myViewController.topViewController animated:YES];


注意:这样的事情可能会发生,但它离默认的UIViewController行为太远了:

[myViewController pushIntoNavigationController:navController]; // only push myViewController.topViewController
[myViewController presentModallyInParentController:parentController]; // push the whole myViewController

1 个答案:

答案 0 :(得分:1)

myViewController子类中,创建一个类似这样的方法:

- (void)presentFromViewController:(UIViewController *)presentingViewController
{
    if ([[presentingViewController class] isEqual:[UINavigationController class]])
        [presentingViewController pushViewController:self.topViewController animated:YES];
    else
        [presentingViewController presentModalViewController:self animated:YES];
}

这会起作用还是我不能正确理解?