添加多个表视图时访问单元原型

时间:2018-07-20 09:26:24

标签: arrays swift uitableview

我正在使用一个使用for循环创建的unknown number of tableViews应用程序。将cellReuseIdentifier与单元格原型对齐时,问题是一个问题。

我因错误而崩溃:

  

由于未捕获的异常而终止应用程序   “ NSInternalInconsistencyException”,原因:“无法使单元出队   标识符为Cell0的-必须为该寄存器注册一个笔尖或一个类   标识符或连接情节提要中的原型单元。”

我的代码如下:

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var inviteArray: [(greetingText: String, greetingArray: [String])] = []    // we don't know up front the size of the inviteArray or the sizes of the greetingArray's
    var tableViewArray: [UITableView] = []
    override func viewDidLoad() {
        super.viewDidLoad()
        var tableReference = 0
        for invite in inviteArray {
            let myTableView = UITableView(frame: CGRect(x: 0, y: 0, width: 100, height: 200))
            self.tableViewArray.append(myTableView)
            myTableView.backgroundColor = UIColor.white
            myTableView.delegate = self
            myTableView.dataSource = self
            myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell\(tableReference)")
            addSubview(myTableView)
            tableReference = tableReference + 1
        }
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var count = inviteArray[0].greetingArray.count
        for (index, table) in tableViewArray.enumerated() {
            if tableView == table {
                count = inviteArray[index].greetingArray.count
            }
        }
        return count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // var cell = tableView.dequeueReusableCell(withIdentifier: "Cell0", for: indexPath)
        var cell = UITableViewCell?    // replacing the variable declaration line above solved this
        for (index, table) in tableViewArray.enumerated() {
            if tableView == table {
                cell = tableView.dequeueReusableCell(withIdentifier: "Cell\(index)", for: indexPath)
                cell.textLabel?.text = inviteArray[index].greetingArray[indexPath.row]
            }
        }
        cell.selectionStyle = UITableViewCellSelectionStyle.default
        cell.textLabel?.font = UIFont(name: "Courier", size: 12)
        cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
        return cell
    }
}

使用tableViewArray捕获多个表视图似乎是死路一条,有人知道这样做的另一种方法吗?

2 个答案:

答案 0 :(得分:0)

转到情节提要,单击Tableviwe上的原型单元,并为其提供与您要出队相同的标识符,错误提示为

  

'无法使标识符为Cell0的单元出队-必须注册一个笔尖   或标识符的类,或将原型单元连接到   故事板”。

在您的情况下,标识符应为“ Cell0”

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell: UITableViewCell
    for (index, table) in tableViewArray.enumerated() {
        if tableView == table {
            cell = tableView.dequeueReusableCell(withIdentifier: "Cell\(index)", for: indexPath)
            cell.textLabel?.text = inviteArray[index].greetingArray[indexPath.row]
        }
    }
    cell.selectionStyle = UITableViewCellSelectionStyle.default
    cell.textLabel?.font = UIFont(name: "Courier", size: 12)
    cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
    return cell
}

答案 1 :(得分:0)

在编辑后的帖子中替换变量声明解决了该问题