有关如何重置UITableView
的任何想法?
我想在按下按钮时显示一组新数据,并从单元格的contentView
中删除所有子视图,并使用一组新的子视图刷新它们。我尝试了[tableView reloadData]
,但数据确实已刷新,但添加到单元格的contentView
的子视图以前仍然存在。
答案 0 :(得分:37)
更好的是,当你创建单元格时:
#define MY_CUSTOM_TAG 1234
mySubview.tag = MY_CUSTOM_TAG;
[cell.contentView addSubview:mySubview] ;
稍后,当您需要删除它时:
[[cell.contentView viewWithTag:MY_CUSTOM_TAG]removeFromSuperview] ;
答案 1 :(得分:25)
我得到了答案:)
if ([cell.contentView subviews]) {
for (UIView *subview in [cell.contentView subviews]) {
[subview removeFromSuperview];
}
}
这段代码将检查单元格的内容视图是否有任何子视图 如果有的话,它会在for循环迭代时删除它们!
答案 2 :(得分:16)
您可以简单地执行此操作,而不是遍历所有子视图(您自己)以删除它们,
[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
答案 3 :(得分:2)
如果要删除UITableViewCell的所有子视图,可以使用以下代码:
NSArray* subviews = [cell.contentView subviews];
for (UIView* subview in subviews) {
[subview removeFromSuperview];
}
使用@leftspin的代码
答案 4 :(得分:2)
我知道这个问题很老,但我发现解决方案有问题,如果从一个原型单元中删除一个子视图,这个视图将从所有重用的单元格中删除,这将在下一个单元格中创建一个空指针将被重复使用。
如果您继承UITableViewCell并从那里删除子视图,则必须先进行此验证:
if (mySubView != nil ) {
mySubView.removeFromSuperview()
}
这也适用于indexPath方法
中的cellForRow func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCustomCell
if (cell.mySubView != nil) {
cell.mySubView.removeFromSuperview()
}
return cell
}
惠特这个你避免空指针,代码是swift 3.希望这有助于某人。 :)
答案 5 :(得分:2)
对于Swift 3.1
let theSubviews: Array = (cell?.contentView.subviews)!
for view in theSubviews
{
view.removeFromSuperview()
}
答案 6 :(得分:0)
cell.contentView.subviews.forEach({$ 0.removeFromSuperview()})
答案 7 :(得分:0)
for subview in cell.contentView.subviews {
subview.removeFromSuperview()
}
答案 8 :(得分:0)
您尝试替换内容而不是UI,例如将标签替换为文本:
class CustomCell : UITableViewCell {
var firstColumnLabel = UILabel()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
firstColumnLabel = //create label
contentView.addSubview(firstColumnLabel)
}
func setData(cad: String) {
firstColumnLabel.text = cad
}
}
和您的tableSource
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell : UITableViewCell?
cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
(cell as! CustomCell).setData(cad: "new value")
return cell!
}