【问题标题】:How to design a table header in Xcode's IB in Swift如何在 Swift 中的 Xcode 的 IB 中设计表头
【发布时间】:2019-11-16 19:07:09
【问题描述】:

在使用 Swift 的 Xcode 中,我会将标题 UITableViewHeaderFooterView 添加到表 UITableView。 我会在 IB 中设计它,然后使用 dequeueReusableHeaderFooterView,但由于各种原因,任何尝试都失败了。 我是否需要在主 Storyboard 中添加 UIView,或者准备一个新的专用 Storyboard,或者一个 xib 文件? 如何连接到 Swift 代码?

【问题讨论】:

    标签: swift xcode


    【解决方案1】:

    您可以创建一个新的 xib 文件,在该文件中设计标题视图,然后在设置表视图时调用 register(_:forHeaderFooterViewReuseIdentifier:)

    类似这样的:

    tableView.register(UINib(nibName: "FileNameOfYourXIBFile", bundle: nil), forHeaderFooterViewReuseIdentifier: "myHeader")
    

    然后你可以这样做:

    let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "myHeader")
    

    【讨论】:

    • 感谢清道夫。 IB 创建 .storyboard 或 .xib 文件。使用带有标签的 xib 文件封装一个视图,代码中止,因为“为标识符 (myHeader) 注册的 nib 无效 - nib 必须包含一个必须是 UITableViewHeaderFooterView 实例的顶级对象”。
    • @Luca_65 你应该完全按照错误所说的去做。您不应该在 xib 中使用普通的旧 UIView。将身份检查器中视图的“类”更改为UITableViewHeaderFooterView
    • 是的,你是对的。在 IB 的
      .xib 文件中,我将视图自定义类设置为我的 UITableViewHeaderFooterView 实现,该实现当前为空。 IB 中的视图有一个标签,不显示。
    • @Luca_65 这很奇怪。您是否在FileNameOfYourXIBFile 中包含了扩展名“.xib”?你不应该那样做。
    • 我只使用裸名 override func viewDidLoad() { super.viewDidLoad() tableView.register(UINib(nibName: "Header", bundle: nil),forHeaderFooterViewReuseIdentifier: "myHeader") }
    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多