我不知道我的代码有什么问题。我在互联网上进行的研究找不到解决此问题的方法。
我在同一个UIViewController中有两个UITableView。它们都有自己的UITableView类,并且从MainStoryboard正确分配了它们的标识符(多次检查,连接是否牢固)。
内viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "PortfolioCell")
barTableView.delegate = self
barTableView.dataSource = self
barTableView.register(UITableViewCell.self, forCellReuseIdentifier: "BarCell")
相关代码:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.tableView {
return selCur.count
} else {
return selCur.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == self.tableView {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "PortfolioCell", for: indexPath) as? PortfolioCell else { return UITableViewCell() }
let noVal = selCur.count[indexPath.row].rank ?? 0
let nameVal = selCur.count[indexPath.row].name ?? "N/A"
cell.configureCell(no: noVal, name: nameVal)
}
}
return cell
} else {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "BarCell", for: indexPath) as? BarCell else { return UITableViewCell() }
let noVal = selectedCurrencies[indexPath.row].rank ?? 0
let nameVal = selectedCurrencies[indexPath.row].name ?? "N/A"
cell.configureCell(no: noVal, name: nameVal)
}
}
return cell
}
}
我猜想,
cellForRowAt
方法返回常规UITableViewCell而不是自定义“ PortfolioCell”或“ BarCell”。我也尝试了tableView.tag
方法,并得到了相同的结果。先感谢您。
最佳答案
您必须正确注册每个单元格。
tableView.register(PortfolioCell.self, forCellReuseIdentifier: "PortfolioCell")
或者如果您的单元格具有
.xib
tableView.register(UINib(nibName: "PortfolioCell", bundle: nil),
forCellReuseIdentifier: "PortfolioCell")
如果单元格位于情节提要中,则您甚至无需注册。
关于ios - 如何使用Swift在单个UIViewController中实现多个UITableView?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47582820/