【问题标题】:nib must contain exactly one top level object which must be a UITableViewHeaderFooterView instancenib 必须包含一个必须是 UITableViewHeaderFooterView 实例的顶级对象
【发布时间】:2017-12-31 23:52:34
【问题描述】:

在为我的 tableView 创建 customHeader 时遇到了一个奇怪的问题。我收到的错误如下:

nib 必须只包含一个顶级对象,该对象必须是 UITableViewHeaderFooterView 实例

我浏览了我的代码和 xib 文件以及示例,但我找不到任何错误的任何想法?

标题 Xib 是使用常规视图创建的,然后是带有标签的子视图,类是使用以下内容创建的:

CustomTableHeader 类:

class CustomTableHeader: UITableViewHeaderFooterView {
    static var CustomTableHeaderIdentifier = "CustomTableHeader"
    @IBOutlet weak var titleLabel: UILabel!

    override awakeFromNib(){
         super.awakeFromNib()
         self.titleLabel.text = "Header"
    }

    override func prepareForReuse() {
        super.prepareForReuse()
    }
}

ViewController 类:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.register(UINib.init(nibName: CustomTableHeader.CustomTableHeaderIdentifier, bundle: nil), forHeaderFooterViewReuseIdentifier: CustomTableHeader.CustomTableHeaderIdentifier)
    }


    //Other Methods
     func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
         if let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: CustomTableHeader.CustomTableHeaderIdentifier) as? CustomTableHeader {
            header.titleLabel.text = "Section 1"
            return header
     }
}

【问题讨论】:

    标签: ios uitableview swift3


    【解决方案1】:

    我发现了我的问题!万一有人遇到这种情况,请确保您的第一个视图确实是 XIB 文件中的唯一对象。例如,我试图在标题视图中添加一个手势,这也被认为是一个对象。如果您想添加手势,您可以通过编程方式进行:

    addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(/* FUNCTION */)))
    

    【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2017-05-02
      • 2020-01-23
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      相关资源
      最近更新 更多