tableView reloadData不会删除以编程方式放置的以前的UITextView

时间:2014-03-08 17:24:47

标签: ios objective-c uitableview

我有一个UITableView,其中有几个不同的元素以编程方式添加。我遇到的问题是UITextView正确显示正确的颜色,大小,字体等...我在一个单元格中有一个按钮,增加了另一个单元格中UITextView中字体的大小。它工作正常,没有问题。数值放在Plist中,当您将视图与表格一起离开并返回时,尺寸会完全变化。

我在按钮中放置了一个reloadData,它重新加载了表格,并为textView提供了新的大小,并调整了它以适应新内容,并且完美地调整了单元格的大小。我遇到的问题是,当调用reloadData时,旧的textView仍然存在。所以我有两个不同大小的文本,或者三个或四个等等。如果未将其设置为全局,我该如何删除以前的textView?

一切都准确地设定了:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

// cell with textView. Everything is instanced and created for just that cell with tags
UITextView *t = [self setSizeAndTextOfTextView];
[cell.contentView addSubview:t];

// cell with button. simple, alloc's and init inside cell. Calls method in same class
cell.contentView addSubview:button];

//method to increases font size
write to Plist the new size
[self.tableView reloadData]; <-- tableView is iboutlet that does reload table

2 个答案:

答案 0 :(得分:3)

你是如何获得这个细胞的?你在重复使用吗?如果您不想再次将textview添加为子视图,则需要检索现有文本视图并进行调整

更新:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

if ([cell.contentView viewWithTag:1]) {
    UITextView *t = (UITextView *)[cell.contentView viewWithTag:1];
    //This version will take an existing textview and just resize it
    [self setSizeAndTextOfTextView:t];

} else {
    //This version creates a new text view
    UITextView *t = [self setSizeAndTextOfTextView];
    t.tag = 1
    [cell.contentView addSubview:t];
}

你可能还需要和你按钮做类似的事情

reloadData不会擦除现有的单元格,只会显示所显示的数据,因此您将重新使用旧单元格

答案 1 :(得分:2)

您可以考虑创建UITableViewCell的自定义子类,并将其与您的单元格标识符相关联。在子类中,覆盖prepareForReuse方法以将单元格设置回中性状态。由于单元对象被重用但仅初始化一次,prepareForReuse可用于将已存在的单元恢复到其刚刚初始化的状态。