UITableViewCell становится синим при прокрутке

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

Я получаю действительно странную ошибку, и я не могу понять, как это исправить: когда я прокручиваю свой UITableView, иногда ячейка выделяется синим цветом, даже если я не полностью выделен.

Например:
-Ячейка 1-
-Ячейка 2-
-Ячейка 3-
-Ячейка 4-
Если я нажму пальцем на ячейку 2 и прокрутю до ячейки 4, ячейка 2 останется выделенной, даже если didSelectRowAtIndexPath: никогда не запускается.

Есть идеи?

РЕДАКТИРОВАТЬ добавленный код:

 UITableViewCell *cell = nil;
    
    static NSString *cellId = @"StyleDefault";
    cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
    }
    
    cell.textLabel.text = @"Cell One";
    cell.textLabel.textAlignment = UITextAlignmentCenter;
    [cell setAccessoryView:nil];
    
    return cell;
  

Комментарии:

1. не могли бы вы показать нам код создания ячейки в cellForRowAtIndexPath?

2. пожалуйста, расскажите нам, что именно вы делаете в CellForRowAtIndexPath делегировании?

Ответ №1:

ИСПРАВЛЕНО!

Мое решение состояло из двух частей:

1) В cellForRowAtIndexPath: введите «cell.selected = NO;», что устраняет проблему, связанную с тем, что при нажатии на ячейку она исчезает с экрана (прокрутка).

 UITableViewCell *cell = nil;

static NSString *cellId = @"StyleDefault";
cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] 
             initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
}

cell.textLabel.text = @"Cell One";
cell.textLabel.textAlignment = UITextAlignmentCenter;
[cell setAccessoryView:nil];

//Here:
cell.selected = NO;

return cell;
  

2) Поместите «[TableView deselectRowAtIndexPath: indexPath animated: YES];» в didSelectRowAtIndexPath: вместо того, что у меня было раньше «[[TableView cellForRowAtIndexPath:indexPath] setSelected: NO];» что было неправильно на очень многих уровнях.

 [tableView deselectRowAtIndexPath:indexPath animated:YES];
  

Надеюсь, это поможет другим, у кого есть эта проблема. Корпус закрыт.

Ответ №2:

Вы можете использовать следующее при создании ячейки.

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

cell = Your allocation.

cell.selectionStyle = UITableViewCellSelectionStyleNone;
  

Я думаю, вам также нужно, пожалуйста, взглянуть на свойство UIViewTable для касания, т. Е. Задержки касаний содержимого и отмены касаний содержимого.

Надеюсь, это поможет.

Комментарии:

1. Это избавляет от выделения при прокрутке, но, к сожалению, делает так, что если пользователь действительно выбирает строку, она не становится синей.

Ответ №3:

Переопределите -TableView: выделитетwatindexpath: в вашем делегате UITableView и вернет nil для всего, просто чтобы убедиться, что вы не разрешаете ему выбирать строки.

Комментарии:

1. Я думаю, он хочет, чтобы ячейка была выбираемой. Его точка зрения заключается в том, что вы прокручиваете представление.

2. Это вообще не позволяет мне выбирать строку