当我实现第一个tableView并且它正常工作时,我尝试在Tabbar上的同一个viewController上实现另一个tableView,然后发生崩溃。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
答案 0 :(得分:3)
当您在同一个控制器中放置两个表视图时,两个表视图的委托/数据源将连接到同一个控制器。您必须确定哪个表视图必须更新。您可以通过获取两个表视图的出口然后在cellForRowAt中应用简单的条件构造来完成此操作。
这是我实施的方式。
代码
extension ViewController: UITableViewDelegate, UITableViewDataSource
{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == firstTableView
{
if let cell = tableView.dequeueReusableCell(withIdentifier: "prototypeOne", for: indexPath) as? UITableViewCell
{
cell.textLabel?.text = "First table view. Row \(indexPath.row)"
return cell
}
else
{
let cell = UITableViewCell.init(style: .default, reuseIdentifier: "prototypeOne")
cell.textLabel?.text = "First table view. Row \(indexPath.row)"
return cell
}
}
else if tableView == secondTableView
{
if let cell = tableView.dequeueReusableCell(withIdentifier: "prototypeTwo", for: indexPath) as? UITableViewCell
{
cell.textLabel?.text = "Second table view. Row \(indexPath.row)"
return cell
}
else
{
let cell = UITableViewCell.init(style: .default, reuseIdentifier: "prototypeTwo")
cell.textLabel?.text = "Second table view. Row \(indexPath.row)"
return cell
}
}
return UITableViewCell()
}
}
输出
答案 1 :(得分:1)
在故事板中选择您的prototipe单元格,并在右侧的Inspectors中将标识符设置为Cell。 请注意,此标识符与单元类不同。
答案 2 :(得分:0)
在第二个uitableview中注册相同的uitableviewcell。
答案 3 :(得分:0)
将您的两个表与tableview对象进行比较:
创建两个表的IBOutlet假设table1和table2然后在tableview比较tableview的任何委托/ Datasource方法中执行代码
EG。 :我为2 tableview定义了numberOfRowsInSection
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(tableView == self.table1)
{
return self.menuTitles.count;
}
else
{
return ModelCollection.count;
}