7

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

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

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

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

3 回答 3

5

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

于 2012-10-02T20:50:43.593 回答
2

在斯威夫特:

let mainViewController = MainViewController()
let navigationController = UINavigationController(rootViewController: mainViewController)
present(navigationController, animated: true, completion: nil)
于 2018-08-08T17:23:54.423 回答
1

我将在 Interface Builder 中创建任何需要具有 NavigationBar 的静态 UIView。当您以模态方式呈现 viewController 时(我假设),是否需要整个 UINavigationController 由您决定。只要您最终不将一个navigationController 的rootView 推入另一个navigationController 中,这将在第一个navigationController 下创建一个navigationBar,没什么大不了的。

当我呈现一个“登录”类型的表单或类似的表单时,它会有一个“完成”和“取消”按钮,我将使用这些项目创建一个 XIB 并呈现它。

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

于 2012-10-02T20:43:00.240 回答