在我的tableview中,每个单元格都是不同的,由服务器的JSON响应决定。并且会有无限的可能性。因此,不可能为每种类型的单元定义原型。
例如,一个单元格将具有标签和按钮,另一个单元格具有不同顺序的图像和按钮。
如何在tableview单元格中实现这种动态结构?
目前我正在做的是:在cellForRowAtIndexPath中将视图添加为子视图,但这种方式滚动非常滞后。
如何在不影响性能的情况下实现这一目标
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! MyCell
for myview in data[indexPath.row].myviews{
cell.addSubview(myview)
}
return cell
}
答案 0 :(得分:0)
如果您正在使用表格视图,那么您的内容将垂直滚动,对吧?
您可以水平放置的UI数量存在物理限制。受屏幕尺寸的限制。
所以我猜你的UI部分是在单元格中垂直排列的?
所以不要在单元格中垂直布置按钮,标签,图像,其他按钮和文本字段......
创建一个名为ButtonCell,LabelCell,ImageCell,MultiLineLabelCell,TextFieldCell等的单元格类型......
所以现在,不是创建一个添加了所有这些元素的单元格。而是创建多个单元格,每个单元格包含一种类型的UI。现在,您可以按任何特定顺序将单元格出列(由JSON驱动),并且不会失去性能。
答案 1 :(得分:0)
我看到的唯一解决方案是使用空单元格并根据需要添加/删除子视图。但是,只有在之前未添加新子视图时,才应将新子视图添加到单元格中。 例如:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! MyCell
if cell.contentView.viewWithTag(1) == nil {
let label = UILabel()
label.tag = 1
cell.contentView.addSubview(label)
}
let label = cell.contentView.viewWithTag(1)
// label config there
return cell
}
另外,不要忘记将子视图添加到单元格的内容中,而不是单元格本身。