2014-06-29 3 views
0

Здравствуйте, я недавно встречался с проблемой на UITableViewCellUITableViewCell странного поведения

-(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]; 

Это должно предотвратить клеток, появляющихся с когда они не должны. Однако это также означает, что если вы нажмете кнопку на ячейке, а затем погаснет экран и снова включится, она также снова отобразит кнопку, когда вы, вероятно, этого не захотите. Вам нужно будет следить за тем, какие строки вы нажали на кнопку в вашей модели, если вы этого не хотите.

Смежные вопросы