2014-06-29 62 views
0

你好,我最近有一個問題上的UITableViewCell遇到了的UITableViewCell怪異的行爲

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"ContentCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    CloseButton *cButton = (CloseButton *)[cell viewWithTag:20]; 
    [cButton addTarget:self action:@selector(deleteDetector:) forControlEvents:UIControlEventTouchUpInside]; 
    ... 
return cell; 
} 

後來,我刪除探測器:

-(void)deleteDetector:(id)sender { 
    CloseButton *cButton = (CloseButton *)sender; 

    [cButton setHidden:YES]; 
} 

當我開始向下滾動到喜歡的1000個細胞,按鈕開始出現,其中一些開始消失。

回答

1

好了,如果我正確地理解你的問題,我想這是怎麼回事是:

你按下一個細胞,這使得按鈕隱藏的按鈕。然後,向下滾動,出現另一個單元格,並且該按鈕已隱藏(即使您尚未按下該行的按鈕)。

這是因爲您的單元格實際上正在被重用,這意味着當已經隱藏了按鈕的單元格之一被重用時,該按鈕仍將隱藏(因爲它實際上是同一個單元格)。在「速戰速決」,以證明這是取消隱藏按鈕在你tableView:cellForRowAtIndexPath:方法,像這樣:

[cButton setHidden:NO]; 

做到這一點的地方在這之後,很明顯:

CloseButton *cButton = (CloseButton *)[cell viewWithTag:20]; 

這應該避免與出現細胞按鈕隱藏時,他們不應該。但是,這也意味着,如果您按下單元格上的按鈕,然後它離開屏幕並重新開啓,那麼當您不想使用它時,它也會再次顯示該按鈕。如果你不希望發生這種情況,你必須跟蹤你的模型中按下了哪些行。