#ios #objective-c #uitableview
#iOS #objective-c #uitableview
Вопрос:
Здравствуйте, я недавно столкнулся с проблемой в 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];
Это должно предотвратить появление ячеек со скрытой кнопкой, когда они не должны. Однако это также будет означать, что если вы нажмете кнопку в ячейке, а затем она исчезнет с экрана и снова включится, она также снова покажет кнопку, когда вы, вероятно, этого не хотите. Вам нужно будет отслеживать, в каких строках вы где-то нажали кнопку в своей модели, если вы не хотите, чтобы это произошло.