【问题标题】:titleView only works in one view controller (self.navigationController is nil)titleView 仅适用于一个视图控制器(self.navigationController 为 nil)
【发布时间】:2011-10-31 21:20:19
【问题描述】:

我在标签控制器下的 NIB 中设置了一些导航控制器。我正在尝试在每个导航控制器的顶视图控制器中设置相同的徽标。

在出现的第一个视图控制器中,我在viewDidLoad 中有这段代码:

self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"green-noback-logo-only.png"]] autorelease];

这行得通(好吧,几乎,我将不得不调整图像大小)并用我的徽标图像替换 NIB 中设置的文本。

但是,这个完全相同的代码在其他两个视图控制器中都不起作用。相反,我在 NIB 中为标题设置的任何文本都会显示。我试过将该代码放在initWithCoder, viewDidLoad, viewDidAppear 和viewWillAppear 中,但它什么也没做。我明确地将leftBarButtonItem 设置为 nil,尽管我猜它一开始就是 nil。我还检查了 self.navigationItem 在我尝试设置 titleView 的任何地方都不为零。

知道其他两个控制器有什么特别之处会阻止它们设置 titleView 吗?否则,有没有人有更万无一失的方法来设置titleView?

【问题讨论】:

  • 好的,多亏了 Paul N,我发现有些地方不对劲,因为 navigationController 为 nil。我正在调查。

标签: iphone objective-c cocoa-touch uinavigationcontroller uinavigationitem


【解决方案1】:

尝试将图像视图设置为self.navigationController.navigationItem 而不是self.navigationItem。

【讨论】:

  • 事实上,看起来 self.navigationController 在所有这些方法中都是 nil。
  • mmmm,试试这个: UIImage *image = [UIImage imageNamed:@"TableviewCellLightBlue.png"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; [self.navigationController.navigationBar.topItem setTitleView:imageView];
  • 确实可以看到这个链接:stackoverflow.com/questions/1553118/…。问题是我之前添加的代码,用于设置标题图像,答案是将图像设置为导航栏背景的代码。
  • 就像我说的,self.navigationController 是 nil...所以调用它的方法不会做任何事情。
【解决方案2】:

tl;dr:我搞砸了initWithCoder:。

对于初学者来说是一个很好的壁垒。按照 Paul N 的回答,我在两个损坏的视图控制器中发现了 self.navigationController == nil。我又花了几个小时的主管才弄清楚剩下的事情。

所有三个顶级视图控制器都是 UITableViewController 的子类。但是,其中只有 两个 使用了分组样式。我在两个非工作表视图控制器中覆盖 initWithCoder: 以使用 initWithStyle:。这丢弃了与存储在 NIB 中的导航控制器的连接。我最初这样做是因为我不知道如何在 NIB 内部设置分组样式(由 another answer here 建议)。

我猜,这对我以如此糟糕的方式进行子类化很有帮助。

无论如何,解决方案是修复initWithCoder: 实现以照常调用[super initWithCoder:coder] 并在NIB 中设置表格视图样式。我通过在该视图控制器下拖动一个表视图、设置数据源、设置委托并将其设置为分组样式来做到这一点。 (这是默认情况下在 NIB 中设置表视图控制器的方式。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多