2011-12-29 4 views
1

У меня есть более 50 строк в моем столе. Если мне нужно посмотреть 50-ю ячейку, мне придется прокручивать вниз. Я также включил несколько Selections для моей таблицы. Проблема заключается в том, что, когда я выбираю 5 строк и затем прокручиваю вниз, я также выбираю некоторые другие строки (строки, которые я не выбрал, и был выбран автоматически, когда я прокручивал далее ниже).Множественный выбор ячейки ячейки

1.) Как я могу это преодолеть?

Мой cellForRowAtIndexPath метод

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    [email protected]"Text values"; 
} 

Мой didSelectRowAtIndexPath метод

UITableViewCell *cell = [self.tble cellForRowAtIndexPath:indexPath]; 

if ([cell accessoryType] == UITableViewCellAccessoryNone) { 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 

} 
else { 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 

} 

2.) Я не уверен, если мои didSelectRowAtIndexPath работает правильно (как в позволяют выбрать несколько строк) Может кто-то помочь мне решить эту проблему

ответ

2

Вы сохраняете выбор, установив вид аксессуара ячейки. Когда вы повторно используете выбранную ячейку, аксессуар не сбрасывается. Вам также нужно установить или отключить вид аксессуара в cellForRowAtIndexPath (установить, если путь указателя является частью выбора табличного представления (indexPathsForSelectedRows), если нет).

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

1

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

didSelectRowAtIndexPath может выглядеть как

if ([cell accessoryType] == UITableViewCellAccessoryNone) { 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
    [_array insertObject:[NSNumber numberWithInt:1] atIndex:indexPath.row]; 

} 
else { 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 
[_array insertObject:[NSNumber numberWithInt:0] atIndex:indexPath.row]; 
} 

затем в cellForRowAtIndexPath вы можете сделать

BOOL checked=[[_array objectAtIndex:indexPath.row] boolValue]; 
    if(checked) 
{ 
    [cell setAccessoryType:UITableViewCellAccessoryCheckmark]; 
} 
else 
{ 
    [cell setAccessoryType:UITableViewCellAccessoryNone]; 
} 

надеюсь, что это помогает

+0

говоря '// проверить cell' вы имеете в виду' если (ячейка == ноль) { ячейки = [[ UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; ?? cell.textLabel.text = @ "Текстовые значения"; } ' – sharon

+0

нет, я имею в виду привязку знака аксессуара к галочке. – Daniel

+0

Какая разница, если я не хочу добавлять дополнительную метку и просто хочу, чтобы она была выделена. В любом случае я могу это сделать? – sharon

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