Iphone - cellForRowAtIndexPath странно ведет себя при прокрутке вниз и вверх - PullRequest
0 голосов
/ 21 апреля 2011

Я хотел бы получить TableView с различными элементами на accessoryView, в зависимости от раздела.Все работает нормально, но когда я прокручиваю вниз до секции 2, а затем снова прокручиваю вверх до секции 0, строки в секции 0 имеют переключатели.Не могли бы вы помочь мне выяснить, что я делаю не так?</p> <pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSInteger sectionIndex = [indexPath section]; static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; NSDictionary *dictionary; NSArray *array; NSString *cellValue; UISwitch *switchView; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } switch (sectionIndex) { case 0: cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; break; case 1: cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; break; case 2: switchView = [[UISwitch alloc] initWithFrame:CGRectZero]; cell.accessoryView = switchView; [switchView setOn:NO animated:NO]; [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; [switchView release]; break; default: break; } dictionary = [searchArray objectAtIndex:indexPath.section]; array = [dictionary objectForKey:@"advancedSearch"]; cellValue = [array objectAtIndex:indexPath.row]; cell.textLabel.text = cellValue; return cell;

}

Ответы [ 3 ]

0 голосов
/ 21 апреля 2011

Вы удаляете из очереди ячейки таблицы (см. -[UITableView dequeueReusableCellWithIdentifier:]), что означает, что вы получаете представления таблицы, которые уже были распределены и, возможно, предварительно заполнены устаревшими данными.В case 0: и case 1: вашего оператора switch вы должны добавить следующую строку:

cell.accessoryView = nil;
0 голосов
/ 21 апреля 2011

Проблема от dequeueReusableCellWithIdentifier, вы должны использовать разные идентификаторы для разных ячеек, потому что вы их повторно используете.

0 голосов
/ 21 апреля 2011

Используйте разные идентификаторы ячеек для разных ячеек. Что-то вроде:

NSString *CellIdentifier;
switch ([indexPath row]) {
   case 0: CellIdentifier = @"cell0";
           break;
   case 1: CellIdentifier = @"cell1";
           break;
   default: CellIdentifier = @"cell";
           break;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...