2013-02-19 66 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請求隨時運行?然後,您不需要防止雙擊 - 請記住已發送加載更多請求,並在請求返回或超時後重置標記。

相關問題