2012-04-07 2 views
0

В моем приложении у меня есть подробный вид, где пользователь может редактировать атрибуты, например, человека, их имя, адрес и т. Д.Повторяемость аксессуаров UITableViewCell?

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

Я просматривал свой код десятками раз с тонкой расческой и не мог найти эту чертову причину. Что может вызвать это? Вот код, который я использую для создания UISwitch только на одной клетке:

if (indexPath.section == 0 && indexPath.row == 1) 
{ 
    cell.textLabel.text = @"Confirmed"; 

    //Make the cell unselectable 
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
    //Create and add uiswitch 
    confirmedSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; 
    [confirmedSwitch addTarget:self action:@selector(switchConfirmedStatus:) forControlEvents:UIControlEventValueChanged]; 
    [confirmedSwitch setOn:[venue.isConfirmed boolValue]]; 
    cell.accessoryView = confirmedSwitch; 
} 

Таким образом, вы ожидаете, чтобы показывать только на этой ячейке, см ничего странного с этим кодом? Я проверил мои операторы if, и все мои скобки checkbox indexPath верны.

Кто-нибудь видит это раньше или имеет какие-либо подсказки?

+1

Звучит как проблема с повторным использованием камеры. Когда вы вызываете 'dequeueReusableCellWithIdentifier:' вы получаете переработанную ячейку - (вы, возможно, добавили переключатель в эту ячейку). Что вам нужно сделать, чтобы удалить добавленное представление, когда вы перерабатываете ячейку. –

+1

Является ли этот код внутри cellForRowAtIndexPath? Используете ли вы один идентификатор ячейки многократного использования? Если да, что вы будете делать, если вы вернете кешированную ячейку, и она не соответствует вашему тегу раздела/строки? –

+0

Ahh, я думаю, ключ в названии «Reuse»! Я использую это, поэтому просто поворачивая вспомогательный вид для ВСЕХ моих других ячеек, чтобы это исправить! Думаю, я слишком много думал, думал, что за этим может возникнуть большая проблема. –

ответ

3

проблема из-за reusability вопросы в UITableView. Вероятно, вы используете один и тот же identifier для всех ячеек, и это приводит к тому, что cellForRowAtIndexPath будет реализован в других строках (при прокрутке вверх и вниз).

Это распространенная проблема, когда вы разрабатываете приложения с tableView, и на StackOverflow есть много вопросов.

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

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

  2. Подкласс UITableViewController и создайте свой собственный CustomTableViewController который будет реализовывать необходимые компоненты в cell. Я считаю, что вам нужно будет переопределить метод set Layout Subviews.

0

Возьмите массив в представлении появится и добавить объект 0 для этой строки и 1 для всех остальных строк, а затем в проверке cellForRowAtIndexPath, если массив имеет 0 по этому индексу, если он затем положить переключатель в противном случае Нилл ..

for(int i =0;i<10;i++) 
{ 
    if(i==1) 
    { 
     [arrayForSwitch addObject:@"0"]; 
    } 
    else 
    { 
     [arrayForSwitch addObject:@"1"]; 
    } 
} 

затем в cellForRowAtIndexPath состоянии записи

if([arrayForSwitch objectAtIndex:indexPath.row isEqualToString:@"0"]) 
{ 
    cell.accessoryView = confirmedSwitch; 
} 
else 
{ 

    cell.accessoryView =UITableViewCellAccessoryNone; 
} 

он теперь будет оставаться таким же

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