我正在使用 Storyboards 在 iPad 6.0 中开发应用程序。
让我先解释一下我的目标。我正在尝试使用 2 个 UITableViewControllers 实现主细节(SplitViewController-like)视图控制器。
第一个 UITableView("Master"),我们称之为HeaderTableView,顾名思义,列出了...
...第二个 UITableView("Detail"),我们称之为EncodingTableView,它包含一个以编程方式更改的 CustomTableViewCell(每个单元格中包含的子视图可能是 UITextField、UIButton 或 UISwitch)。
请参阅EncodingTableView.m
- (void)updateEncodingFields:(NSArray *)uiViewList
{
// Add logic for determining the kind of UIView to display in self.tableView
// Finally, notify that a change in data has been made (not working)
[self.tableView reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *encodingFieldsTableId = @"encodingFieldsTableId";
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:encodingFieldsTableId];
if (cell == nil) {
cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:encodingFieldsTableId];
}
// Change text in textView property of CustomTableViewCell
cell.encodingFieldTitle.text = uiViewList.title;
// added methods for determining what are to be added to [cell.contentView addSubView:]
// data used here is from the array in updateEncodingFields:
}
我的HeaderTableView.m,包含 didSelectRowAtIndexPath 以更新EncodingTableView
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (![selectedIndexPath isEqual:indexPath]) {
selectedIndexPath = indexPath;
[self updateDataFieldTableViewForIndexPath:indexPath];
}
}
- (void)updateDataFieldTableViewForIndexPath:(NSIndexPath *)indexPath {
[self.encodingTableView updateEncodingFields:self.uiViewList];
}
问题- 数据一切正常,但EncodingTableView
为什么不“重绘”字段?我怀疑重复使用细胞与此有关,但我不知道为什么。
结果截图:
HeaderTableView 中的初始选择
HeaderTableView 中的第二个选择
我试过的:
- 我不断看到诸如 [UITableView setNeedsDisplay]、[UITableView reloadData] 和 [UITableView setNeedsLayout] 之类的建议,但它们都不起作用。
- 删除 tableViewCells 的重用工作正常,但这会导致我的部分 CustomTableView.encodingFieldTitle 消失。更不用说如果我放弃重用单元,这可能会导致性能问题。
限制:我知道使用 SplitViewController 是一个好主意,但这只是我的应用程序的一个子部分(因此不是 RootViewController)。
最后,感谢您阅读这么长的帖子。;)