我为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];
}
}
答案 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请求在运行?然后您不需要阻止双击 - 只需记住已发送加载更多请求,并在请求返回或超时后重置标记。