【问题标题】:How to set NavigationController navigationItem title from ViewController loaded by Xib如何从 Xib 加载的 ViewController 中设置 NavigationController 的 navigationItem 标题
【发布时间】:2023-03-12 15:26:01
【问题描述】:

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

MyViewController *myViewController = [[MyViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myViewController];

根据documentation

每次顶级视图控制器发生变化时,导航控制器都会相应地更新导航栏。

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

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

更新

我的 Xib 布局如下所示:

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

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

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

【问题讨论】:

  • 一般情况下,我会在视图控制器的viewDidLoad方法中分配self.navigationItem.titleViewself.navigationItem.leftBarButtonItem等。
  • 您是否在 xib 中的 UIView 中添加了 NavigationBar 视图?如果是这样,那不是它的工作方式。您实际上需要将UINavigationItem 添加到xib 中的控制器中。然后你当然还需要用笔尖初始化控制器。
  • @ChrisLoonam 感谢您的提示。这不是我要找的。看我的更新。 @Rengers 是的,这就是我所做的,也是我想要的。我在 NavigationBar 中添加了 UINavigationItem。查看更新的问题。

标签: ios objective-c uinavigationcontroller


【解决方案1】:

将 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;
}

【讨论】:

  • 感谢您的回答。您能否指出 Apple 建议在 getter 中设置 navigationItem 的链接?
  • 他们唯一说的是:“避免将导航项中条形按钮项的创建与视图控制器视图的创建联系起来。视图控制器的导航项可以独立于查看控制器的视图。(...)"
【解决方案2】:

在您的 ViewController 集中的 ViewWillAppear 方法中-

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

同样你可以set self.navigationItem.leftBarButton 和 RightBarButton 项目

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    相关资源
    最近更新 更多