我有一个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
答案 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
可用于将已存在的单元恢复到其刚刚初始化的状态。