#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. Это вообще не позволяет мне выбирать строку