gpt4 book ai didi

iphone - 将 UIView 放入 UITableView Header

转载 作者:太空狗 更新时间:2023-10-30 03:34:38 25 4
gpt4 key购买 nike

我的 xib 文件中有一个 UITableView。我为 Controller 创建了一个这样的属性:

@property (nonatomic, retain) IBOutlet UITableView *myTableView;

现在,我想要一个表 View 标题(不是每个部分的标题)。因此,因为我想要自定义样式,所以我创建了一个带有 View 的新 xib 文件(并且我连接到我的 Controller ,该 Controller 实现了 myTableView)。

然后我可以写在 viewDidLoad在我的 Controller 中:
[self.myTableView setTableHeaderView:self.myTableHeaderView];

哪里 myTableViewHeader是 Controller 中的 UIView 属性。

不幸的是,UITableView 不会显示这个 UIView,所以我的问题是,如何将 UIView 放到 UITableView 的标题中?

提前致谢并致以最诚挚的问候。

最佳答案

需要检查的几件事:

  • myTableHeaderView 也必须是 IBOutlet 或在您的类中的代码中创建
  • 当您尝试将 self.myTableHeaderView 添加为表格标题 View 时,它不能为 nil。如果它为零,则说明您没有正确连接 socket
  • 如果你在 IB 中设计了它自己的 .xib 文件中的表 View 标题,那么你必须在某个地方调用它(viewDidLoad 是一个好地方):

  • [[NSBundle mainBundle] loadNibNamed:@"MyTableViewHeader" owner:self options:nil];

    MyTableViewHeader.xib 的 File's Owner 必须是您的 TableViewController 子类,并且您必须将 myTableHeaderView 对象连接到 File's Owner 的相应 socket 。

    编辑:回答“ [[NSBundle mainBundle] loadNibNamed:@"MyTableViewHeader" owner:self options:nil]; 做什么”?

    这一小行包含的魔力将让您看到 XIB 文件和 Objective-C 对象如何在 Cocoa (touch) 中协同工作,将您的 iOS 编程功夫提升到全新的水平。有两类 Cocoa 程序员,一类是了解它的作用、使用它并从中受益的一类,一类是尚不知道他们缺少什么的人,而是在尝试为他们的对象创建 XIB 文件的荒野中跌跌撞撞,从来没有完全让它工作。

    有了大量的积累,这里是细节:

    XIB (NIB) 文件是归档的 Objective-C 对象(以及对实际上不在 XIB 内的对象的引用,例如“文件的所有者”,所谓的“代理对象”)以及这些对象之间的连接的集合。当加载 XIB 文件时,这些存档对象将以其保存到 XIB 中的完全状态恢复生机,然后根据 XIB 中记录的连接建立这些事件对象(和“代理对象”)之间的连接文件。

    例如,在您的标准 UIViewController 子类 .xib 文件中,您将 File's Owner 设置为您的 MyViewController 类。在 .xib 中是一个 UIView 对象,它本身通常包含其他 UIKit 对象。 UIViewController 类的“ View ”导出设置为指向 .xib 中的 UIView 对象。当这个 .xib 文件被加载时,UIView 对象被取消归档并成为一个活的 UIView 对象,所有的属性和设置都记录在 .xib 中。这就是“未归档部分”。

    然后,由于 .xib 中从 File's Owner(MyViewController 类)到 UIView 对象的连接,指向这个新 UIView 对象的指针存储在 MyViewController 实例的“ View ”字段中。 .xib 文件中还存在的任何其他连接,如 UILabels、UIButton 操作等,也会设置到 MyViewController 中的任何其他“IBOutlet”字段。

    这一切似乎都像魔术一样发生在
    (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

    当你初始化一个新的 UIViewController 子类时的方法。

    现在好的部分是:您可以自己将 nib 文件与对象相关联!您可以使用 loadNibNamed:owner:options将任何 .xib 文件与您想要的任何对象中匹配的 nil IBOutlets 集相关联的方法!!!

    突然之间,创建完全自定义的表格 View 单元格、表格页眉、页脚等变得轻而易举,您可以轻松编写模块化可重用 UIView 组件等,所有这些都在 Interface Builder 中布局。

    您想用从 .xib 文件加载的对象填充其 nil IBOutlets 的对象是“所有者”对象。通常(但我不确定这是否绝对需要,任何具有相同类型和命名的 IBOutlets 设置为文件所有者的类都可以工作),这是将在 xib 中指定为“文件所有者”的类。

    好的,现在您已经拥有了带有 nil IBOutlets 的现有所有者对象(IBOutlets 必须为 nil 否则它们不会被更改,这是将 XIB 加载到所有者对象中的“规则”。有些 IBOutlets 不是 nil 是可以的,当您加载 XIB 文件时,它们不会被更改,通常这就是您想要的),并且您已经获得了包含要加载到所有者对象中的对象的 .xib 文件。你打电话:
    [[NSBundle mainBundle] loadNibNamed:@"MyXIBFileToLoad" owner:theOwner options:nil];

    .. 瞧!现在,连接到 MyXIBFileToLoad.xib 中的对象的“theOwner”中的任何 nil IBOutlets 都已设置为从 XIB 文件加载的新对象。

    (此外,此方法返回一个包含所有未从 xib 归档的对象的数组。如果您不关心设置任何所有者的导出,您只需按类和标签在此列表中搜索您的对象)。

    故事就是这样,现在用新方法将 Objective-C 类与存储在 XIB 文件中的对象相关联!

    关于iphone - 将 UIView 放入 UITableView Header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4968738/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com