如何基于 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?的主要内容,如果未能解决你的问题,请参考以下文章