如何从 Xib 加载的 ViewController 设置 NavigationController navigationItem 标题

How to set NavigationController navigationItem title from ViewController loaded by Xib

我有一个 UIViewController 从 Xib 文件加载它的视图。在我的 AppDelegate.m 中,我想用我的 ViewController 启动我的 rootViewController 并且我希望通过采用 NavigationBar 视图来设置 navigtionItem 的标题myViewController:

的 Xib 文件的一部分
MyViewController *myViewController = [[MyViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myViewController];

根据 documentation

Each time the top-level view controller changes, the navigation controller updates the navigation bar accordingly.

在我的设置中,这似乎没有发生,或者我没有指出我的 NavigationBar 视图实际上是要考虑的导航栏。

我如何告诉 NavigationController 根据 NavigationBar 视图更新它的 navigationItem 内容(标题、左栏按钮和右栏按钮),该视图是我的ViewController 中 Xib 文件的一部分?

更新

我的 Xib 布局如下所示:

我知道我可以通过以下方式在代码中设置这些项目:

self.navigationItem.titleView = ...;
self.navigationItem.leftBarButtonItem = ...;

但我希望他们在 ViewController 的 Xib 文件中进行设计,并且应该在 NavigationController 中使用它们。

ViewWillAppear 方法中 ViewController set-

      self.navigationItem.title = @"Title name";

也可以用同样的方法 set self.navigationItem.leftBarButton 和 RightBarButton 项

将 UINavigationBar 视图添加到主 UIView 并不像您认为的那样。它只是在视图中添加了一个导航栏视图,它没有绑定到 UINavigationController。

如果您使用故事板,则可以将 UINavigationItem 添加为 UIViewController 的子项。但是由于您没有使用情节提要,最简单的方法是更新 viewDidLoad.

中的 navigationItem

旁注:Apple 不建议使用 viewDidLoad 设置导航项。如果您真的想以正确的方式进行操作,您可以在 navigationItem getter.

中进行操作
- (UINavigationItem*)navigationItem
{
  // get super navigation item
  UINavigationItem *navItem = [super navigationItem];

  // do stuff 

  return navItem;
}