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

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

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

【问题讨论】:

    标签: objective-c ios xcode uinavigationcontroller uinavigationitem


    【解决方案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];
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2018-09-26
      相关资源
      最近更新 更多