我有一个让我发疯的问题。
我有一个始终处于编辑模式的 UITableView(必须如此)。
用户可以向其中添加新行。
tableViewController 的 navigationItem.leftbarButton 推送了一个新的控制器,我们称之为“newRowsVC”。
在推送之前 tableViewController 将自己设置为 newRowsVC 的委托,协议只有一个方法:
-(void) aNewRowHasBeenCreated
{
[self.tableView reloadData];
}
我开始添加行,一切正常,现在每一行都立即显示在 tableViewController 中,直到最后一个新行将强制 tableView 滚动,因为它不再有屏幕空间。在这里,我不知道为什么,只有它的 tableView 是冻结的,没有滚动条并且不响应输入。该应用程序继续运行而不会崩溃,我什至可以通过点击 navigationItem.rightbarButtonItem 来关闭 tableViewController。
我可以继续创建新行,将它们添加到数组中,正确计算 tableView 数据源中的行数。但是桌子就像死了一样。
如果我关闭 tableViewController 然后我回到它,我会看到之前创建的所有行,还有那些在创建后没有显示的行!
我真的不知道如何解决这个问题。
我尝试的第一件事是在重新加载表格后强制滚动,但它没有修复它。
-(void) aNewRowHasBeenCreated
{
[self.tableView reloadData];
[self.tableView setScrollEnabled:YES];
}
我还尝试强制 tableView 滚动到最后一行,但它没有修复它。
-(void) aNewRowHasBeenCreated
{
[self.tableView reloadData];
[self.tableView setScrollEnabled: YES];
[self.tableView scrollToRowAtIndexPosition: [self.tableView indexPathsForVisibleRows]last object] atScrollPosition: UITableViewScrollPositionBottom animated:YES];
}
每次重新加载表时,我都会检查行数。没有错误,数字是完美的,新行数据在数组中正确,还有未显示的单元格的数据。
我认为这可能是因为 tableView 始终处于编辑模式,所以我尝试将其设置为 NO,但没有任何变化,id 无法解决问题。
两个注意事项:
1)tableView 必须是每个自定义单元格的代表。它们有一个 UITextField 和一个 UIStepper,由 tableViewController 处理。我已经尝试不将 tableViewController 设置为其自定义单元格的代表,但没有任何变化,所以问题不在于这个。
2) self.tableView.bounces = NO 但这与滚动问题无关,启用滚动。
更新:经过更多测试后,我发现如果我删除可重用自定义单元格的出队,一切正常,所以问题应该是关于重用的。
static NSString *CellIdentifier=@"MyCell"
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
尼古拉