我有一些在标签控制器下的NIB中设置的导航控制器。我正在尝试在每个navigationcontroller的顶视图控制器中设置相同的徽标。
在出现的第一个视图控制器中,我在viewDidLoad
:
self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"green-noback-logo-only.png"]] autorelease];
这很有效(好吧,差不多,我将不得不调整图像大小)并用我的徽标图像替换NIB中设置的文本。
但是,这个完全相同的代码在其他两个视图控制器中都不起作用。相反,我为NIB中的标题设置的任何文本都显示。我已尝试将该代码放在initWithCoder, viewDidLoad, viewDidAppear
和viewWillAppear
中,但它什么也没做。我明确地将leftBarButtonItem
设置为nil,尽管我猜测它开始时是零。我已经检查过self.navigationItem在我试图设置titleView的任何地方都不是nil。
任何想法会阻止他们使用titleView设置的其他两个控制器有什么特别之处?否则,有人有更简单的方法来设置titleView吗?
答案 0 :(得分:1)
尝试将图片视图设置为self.navigationController.navigationItem
而不是self.navigationItem
。
答案 1 :(得分:1)
tl;博士:我搞砸了initWithCoder:
。
适合初学者的好墙贴画。按照Paul N的回答,我在两个破碎的视图控制器中发现了self.navigationController == nil
。我花了几个小时的时间来找出其余部分。
所有三个顶级视图控制器都是UITableViewController的子类。但是,只有两个使用分组样式。我覆盖了initWithCoder:
在两个非工作表视图控制器中使用initWithStyle:
。这丢弃了与存储在NIB中的导航控制器的连接。我最初这样做是因为我无法弄清楚如何在NIB内部设置分组样式(由another answer here建议)。
我认为,以这种腐烂的方式为我提供子类化是正确的。
无论如何,解决方案是修复initWithCoder:
实现以照常调用[super initWithCoder:coder]
并在NIB中设置表视图样式。我通过在该视图控制器下拖动表视图,设置数据源,设置委托以及将其设置为分组样式来完成此操作。 (这是默认情况下在NIB中设置表视图控制器的方式。)