如何在uitableview中禁用用户与单元格的交互

时间:2013-02-19 20:49:26

标签: iphone objective-c uitableview

我为youtube电影提供简单的UITableView。单元格从数组加载,当我从youtube API获取前10部电影时,最后一个单元格是“加载更多”单元格。当用户点击“加载更多”单元格时,它将获取并加载下10部电影。一切都很好,除非我在“称重传感器”上快速敲击两次或更多次,然后用新阵列刷新我的桌子,而不是我有奇怪的行为(所有带电影的单元格消失,我有很多'加载更多'细胞在表格行中传播)所以我的表格完全搞砸了。如果我只用一下轻轻点击“加载更多”单元格就不存在问题。

我点击了我的单元格之后,我已将userInteractionEnabled设置为NO,但它没有帮助。有人能告诉我我做错了什么吗?这是我的代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
   //Load more json data if loadmore cell tapped
    if (indexPath.row == self.videos.count) {
       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];
  }


 }

3 个答案:

答案 0 :(得分: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 :(得分:0)

设置

[self.view setUserInteractionEnabled:NO]; 

加载时将其更改为

 [self.view setUserInteractionEnabled:YES]; 
加载完成后

答案 2 :(得分:0)

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