【发布时间】:2011-10-19 02:29:57
【问题描述】:
我正在开发一个可以模态显示或推入导航堆栈的视图控制器。我将它设为UINavigationController 子类,这样我就可以免费获得所有UIToolbar 的东西。我可以使用以下方式呈现它:
[self presentModalViewController:myViewController animated:YES];
问题是,UINavigationController 不允许将另一个 UINavigationController 推入其中(有道理),所以它会崩溃:
[self.navigationController pushViewController:myViewController animated:YES];
是否有办法检测myViewController 的呈现方式并自动在UINavigationController 和UIViewController 之间切换,这样我就不需要2 个不同的类了?
换句话说,myViewController 将能够检测到它是如何呈现的,并将其推送到类似以下的内容:
[self.navigationController pushViewController:myViewController.topViewController animated:YES];
注意:这样的事情可能会做,但它离默认的 UIViewController 行为太远了:
[myViewController pushIntoNavigationController:navController]; // only push myViewController.topViewController
[myViewController presentModallyInParentController:parentController]; // push the whole myViewController
【问题讨论】:
-
只是关于子类化 UINavigationController 以“免费获得所有 UIToolbar 的东西”: UINavigationController 已经包含一个免费的 UIToolbar,默认情况下它是隐藏的。使用 UINavigationController 上的
setToolbarHidden:animated:方法取消隐藏它。您可以通过 UINavigationController 的toolbar属性访问常规 UIToolbar 来完成所需的一切 -
这就是我的意思,我将它子类化,以便我可以轻松地将按钮添加到已经存在的工具栏,我不需要自己创建一个,将其添加到视图层次结构等.
-
不过,您不必子类化即可在
UINavigationController.toolbar上使用setToolbarItems:方法。 -
我知道,但是有问题的控制器是SVWebViewController,它是一个可重用的组件(它必须是一个子类)。
标签: iphone view uiviewcontroller uinavigationcontroller