UITableView以编程方式选择行没有预期的效果

时间:2014-07-17 08:14:49

标签: ios objective-c uitableview

我有一个tableview(例如)在唯一的部分中有五行。编辑自定义单元格的代码都可以工作,但是当我需要使用具有较少行的新数据(例如两个)重新加载表数据时会出现问题。如果我编辑的索引的行数高于重新加载的表中的最大行数,则程序会崩溃。例外情况表明它正在尝试访问超出新表行数限制的更高编号的元素。

我尝试过:

[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];

之前的

[self.tableView reloadData];

但它没有用。

3 个答案:

答案 0 :(得分:0)

这只能意味着你在这里访问第一行:

[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];

当你没有第一行时。

当您重新加载tableview时,请确保至少有一行。

尝试这样做:

if([self.tableview numberOfRowsInSection:0]>0)
   [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];

答案 1 :(得分:0)

我相信你使用下面的代码取消选择你的​​手机

[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];

如果是这样,你应该使用它

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];

答案 2 :(得分:0)

最后,取消选择旧行(即旧数据源仍处于当前状态),然后选择带有新数据源的第一行解决了问题。