如何基于 nib 文件创建 UINavigationItem.TitleView?

Posted

技术标签:

【中文标题】如何基于 nib 文件创建 UINavigationItem.TitleView?【英文标题】:How to create a UINavigationItem.TitleView based upon a nib file? 【发布时间】:2011-11-27 15:09:11 【问题描述】:

我有一个基于 UINavigationController 的屏幕序列。在其中一个屏幕上,我想用自定义 TitleView 替换标准标题。自定义视图将使用 nib 文件创建,并具有图像和多个标签。

我是否创建一个带有相关 nib 文件的 UIViewController、加载 nib 并将 .view 属性分配给 TitleView?基本上,我如何使用笔尖来布局必要的元素,然后将结果视图分配给 TitleView 属性?

【问题讨论】:

【参考方案1】:

考虑使用 UINib - 它在 ios 4.0 中公开。因为它会为你缓存笔尖,所以性能会加倍。

UINib *nib = [UINib nibWithNibName:@"TestView" bundle:nil];
UIView *myView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0]];

objectAtIndex 指的是 NIB 中的***视图 - 通常有一个(索引 0),但如果有很多,您需要提供索引。

获得视图后,您可以将其分配给 navigationItem titleView

self.navigationItem.titleView = myView;
[myview release];

编辑:

如果您需要访问 NIB 中的各个控件,请在它们上放置标签并通过 viewWithTag 访问它们。见这里:

http://useyourloaf.com/blog/2011/2/28/speeding-up-table-view-cell-loading-with-uinib.html

【讨论】:

如何在 nib 中公开控件,例如 UILabel,以便在视图设置期间访问它们并设置值? 如果您只有一个带有一些控件的笔尖,这似乎可以工作。但是,如果您想将某些包含的控件作为属性公开,您似乎需要一个视图控制器。在这种情况下,您必须实例化视图控制器,然后将视图属性分配给 titleView。 我编辑了帖子 - 无需创建控制器。查看我的编辑。【参考方案2】:

在 Interface Builder 中创建您的自定义视图并将其加载到视图中(或者您可以创建一个 IBOutlet iVar 来指向该视图)。然后只需将titleView 设置为您的自定义视图。

UIView * customTitleView = [[[NSBundle mainBundle] loadNibNamed:@"TitleView" owner:self options:nil] lastObject];
self.navigationItem.titleView = customTitleView;
[customTitleView release];

【讨论】:

以上是关于如何基于 nib 文件创建 UINavigationItem.TitleView?的主要内容,如果未能解决你的问题,请参考以下文章

如何将乘数应用于在 nib 文件上创建的所有约束?

使用 UIViewController 加载 nib 文件

如何在 iOS 中从 NIB 加载 NIB

如何将多个 nib 文件与多个数组一起使用?

对 nib 文件感到困惑

界面生成器:如何加载 nib 文件