当项目在屏幕外时,iPhone函数selectRowAtIndexPath在UITableView上不起作用

时间:2010-01-12 10:55:22

标签: iphone uitableview

当要在滚动区域中看到要选择的单元格时,它可以正常工作。如果它不在当前可见的滚动区域中,则它从未通过cellForRowAtIndexPath加载,并且它未被选中。而且没有滚动到。怎么了?

这是在iPhone 3.1.2模拟器上。

谢谢, 汤姆。

2 个答案:

答案 0 :(得分:0)

哦,我知道了,这是因为没有调用该函数所以我没有设置所选索引。捂脸。

答案 1 :(得分:0)

如果有人面临同样的问题并且无法弄清楚这个人说的话,这是我的解释:

cellForRowAtIndexPath仅针对可见项目调用,因此当您要通过viewDidLoadselectRowAtIndexPath中选择屏幕外项目时,这些项目未正确初始化。

我这样砍了它:

[ self.tableView scrollToRowAtIndexPath:[self indexPathForSelectedItem] atScrollPosition:UITableViewScrollPositionMiddle animated:NO ];
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){       
    [self.tableView selectRowAtIndexPath:[self indexPathForSelectedItem] animated:NO scrollPosition:UITableViewScrollPositionNone];
});

我需要0.1秒的延迟来等待项目初始化..我知道这不是最漂亮的解决方案,但它确实有效。 如果有人有更好的想法,我很乐意摆脱这个dirty hack

干杯。