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

时间:2017-07-25 21:22:10

标签: ios uitableview swift3

在为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
     }
}

2 个答案:

答案 0 :(得分:14)

我想出了我的问题!为了防止任何人遇到这种情况,请确保您的第一个视图确实是XIB文件中唯一的对象。例如,我在尝试向标题视图添加手势,这也被视为对象。如果要添加手势,可以通过编程方式执行此操作:

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

答案 1 :(得分:-1)

即使我遇到了这个问题。看起来您应该在XIB中拥有一个占位符视图,否则它将崩溃。