我正在开发一个基于IOS Swift的项目,该项目使用几个类来自定义UITableView
和UITableViewCell
。现在,UITableView
中的一个单元格内部为UITableView
。我想知道在cellForRowAtIndexPath中是否有可能,我也可以在同一个进程中以编程方式填充单元格。
EX:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CustomTableViewCell
...... do stuff
cell.detailview.uitableview <!-- populate the cells here?
.......
return cell
}
建议?
答案 0 :(得分:1)
假设有三种不同类型的细胞:
class NormalTableViewCell: UITableViewCell:
这用于&#34;常规&#34;外(主)表视图的单元格。 class TableContainingTableviewCell : UITableViewCell
:这用于&#34;特殊&#34; 外部(主)表视图的单元格,其中包含表格视图(内部)。
class InnerTableViewCell : UITableViewCell
:这用于内部表格视图的单元格(类TableContainingTableviewCell
的单元格中包含的单元格)。
(按实际的班级名称替换每个。)
,您可以使用此代码:
override func viewDidLoad()
{
super.viewDidLoad()
// This can also be done in storyboard with prototype cells:
self.tableView.registerClass(NormalTableViewCell.class, forCellReuseIdentifier: normalCellIdentifier)
self.tableView.registerClass(TableContainingTableViewCell.class, forCellReuseIdentifier: specialCellIdentifier)
}
override func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath
) -> UITableViewCell
{
if tableView == self.tableView {
// [A] OUTER TABLE VIEW
if indexPath == index path of table-containing cell {
// (A.1) TABLE-CONTAINING CELL
let cell = tableView.dequeueReusableCellWithIdentifier(specialCellIdentifier, forIndexPath: indexPath) as! TableContainingTableViewCell
// (...configure cell...)
// Setup and refresh inner table view:
cell.contentView.tableView.dataSource = self
// This is needed for dequeueing to succeed:
cell.contentView.tableView.registerClass(InnerTableViewCell.class, forCellReuseIdentifier: innerCellIdentifier)
cell.contentView.tableView.reloadData()
// ^ THIS TRIGGERS A CALL TO THIS FUNCTION, ON THE
// INNER TABLE VIEW (PATH [B] BELOW)
return cell
}
else {
// (A.2) NORMAL CELL
let cell = tableView.dequeueReusableCellWithIdentifier(normalCellIdentifier, forIndexPath: indexPath) as! NormalTableViewCell
// (configure cell)
return cell
}
}
else {
// [B] INNER TABLE VIEW
let cell = tableView.dequeueReusableCellWithIdentifier(innerCellIdentifier, forIndexPath: indexPath) as! InnerTableViewCell
// (configure cell)
return cell
}
}
...但我坚决反对在另一个表格视图的单元格中嵌入表格视图。至少,确保内部表视图不需要滚动(即,包含单元格足够高以显示所有行,并且表本身已禁用滚动)。