2013-02-19 41 views
2

我对于youtube电影有简单的UITableView。单元格从数组加载,当我从youtube API获取前10个电影时,最后一个单元格是“加载更多”单元格。当用户点击'加载更多'单元格时,它将获取并加载下10部电影。一切都很好,除非当我在'load cell'上快速点击两次或更多次时,它会刷新我的表格,而不是我有奇怪的行为(所有带有电影的单元格都消失了,而且我有很多“加载更多”细胞在表格行内传播),所以我的表格完全搞砸了。如果我只点击一下轻敲“加载更多”单元,问题就不存在。如何在uitableview中禁用用户与单元格的交互

我已经设置userInteractionEnabled为NO后,我的细胞被点击,但它没有帮助。有人能告诉我我做错了什么吗?这里是我的代码:

回答

3

设置UserinteractionEnabled不会阻止委托方法tableView:didSelectRowAtIndexPath:被调用,因此您需要跟踪包含tableViewCell的行的didSelectRowAtIndexPath调用次数,在这种情况下,它只有一次,并运行

[self performSelectorInBackground:@selector(youtubeFeedMore) withObject:nil];

如果该行被窃听只有一次。

例如:

@property (assign) BOOL enableLoadMoreCell; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Load more json data if loadmore cell tapped 
if (indexPath.row == self.videos.count && self.enableLoadMoreCell == YES) { 
    self.enableLoadMoreCell = NO; 

    self.loadCell.userInteractionEnabled = NO; 
    self.loadCell.title.text = @"loading..."; 

//Activity indicators for loadmore cell 
    [self.loadCell.loadMoreActivityIndicator startAnimating]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

    [self performSelectorInBackground:@selector(youtubeFeedMore) withObject:nil]; 
} 


} 

-(void)youtubeFeedMoreSelectorEnded { 
    .... 
Your Code 
    self.enableLoadMoreCell = YES; 

}

+1

简单而有效。谢谢。 – Guferos 2013-02-19 23:26:19

+0

嗨,我意识到这是从近三年前...但是,是否有任何苹果文档,说'设置UserinteractionEnabled不会阻止委托方法tableView:didSelectRowAtIndexPath:被调用?我想要实现这一点,但我有点试探性说我的代码可能会在未来破碎!谢谢 :) – 2015-10-06 22:16:55

1

[self.view setUserInteractionEnabled:NO]; 

时加载,然后将其更改为

[self.view setUserInteractionEnabled:YES]; 

装载完成

+0

正常 - 但如何能源部你知道什么时候加载完成? cellForRowAtIndexPath被调用了很多次,但是你真的不知道哪一个是最后一个 - 我猜没有像'didFinishReloading'这样的回调? – 2015-12-13 12:53:38

0

后如何确保只有一个loadMore请求随时运行?然后,您不需要防止双击 - 请记住已发送加载更多请求,并在请求返回或超时后重置标记。

相关问题