在UINavigationController中包装UIViewController

时间:2012-10-02 20:27:31

标签: ios uiviewcontroller uinavigationcontroller

我希望我的视图控制器有自己的导航栏。我发现这比显示/隐藏现有导航栏更容易。以下代码正在运行。 这是反模式还是相对常见的做法?

MyViewController *viewController = [[MyViewController alloc] init] 
                                    autorelease];

UINavigationController *wrapper = [[[UINavigationController alloc] 
                                   initWithRootViewController:viewController] 
                                    autorelease];

[self.navigationController presentViewController:wrapper 
                                        animated:YES 
                                      completion:nil];

3 个答案:

答案 0 :(得分:5)

要呈现带有导航栏和自己的导航堆栈的模态视图控制器,您发布的代码完全正确。你唯一应该注意的是第二个UINavigationController推送到现有的导航控制器的堆栈上 - 这会给你带来麻烦。

答案 1 :(得分:1)

我需要在上面创建NavigationBar的任何静态UIView都将在Interface Builder中创建。当你以模态方式呈现一个viewController时(我假设),你需要一个完整的UINavigationController来决定。只要你最终没有在另一个navigationController中推送一个navigationController的rootView,这将在第一个创建一个navigationBar,没什么大不了的。

当我提交“登录”类型表格或某些表格时,会有一个“完成”和“取消”按钮,我只会创建一个包含这些项目的XIB并显示它。

如果您正在寻找一种快速的方法来完成所有代码,那么您所做的事情并没有错。您可以轻松访问tintColor和标题。您可以在IB中执行此操作,但您必须拥有一个IBOutlet才能连接所有对象。

答案 2 :(得分:0)

在Swift中:

let mainViewController = MainViewController()
let navigationController = UINavigationController(rootViewController: mainViewController)
present(navigationController, animated: true, completion: nil)