2012-04-01 2 views
3

Может ли кто-нибудь объяснить, почему UIControlEventValueChanged запускается, когда UISwitch включен в ячейке tableview, но нет, если он выключен во время прокрутки?UIControlEventValueChanged для UISwitch в UITableViewCell, стрельба при просмотре свитков

У меня есть еще 100 строк в виде таблицы с данными, которые вытаскиваются из данных ядра, когда UISwitch выключен. UIControlEventValueChanged не запускается, но если я переключу переключатель в положение ON, когда он переключится (строка таблицы) срабатывает UIControlEventValueChanged.

Я использую следующие для конфигурации ячейки

[customCell.seenSwitch addTarget:self action:@selector(seenSwitchChanged:) forControlEvents:UIControlEventValueChanged]; 

Метод seenSwitchChanged, изменяет значение BOOL в основных данных, чтобы соответствовать состояние переключателя.

При прокрутке по экрану стола оно заикается и задерживается при запуске UIControlEventValueChanged. Я предполагаю, потому что tableview ищет данные из CoreData и seeSwitchChanged также пытается получить доступ к CoreData

Если я прокомментирую вышеприведенную строку, табличное представление плавно прокручивается.

Надеюсь, что объяснения достаточно ясны.

Большое спасибо

Matt

EDIT

-(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 
    ECCustomCell *customCell = (ECCustomCell *)cell; 
    ECPerson *person = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

    customCell.name.text = [person valueForKey:@"name"]; 
    customCell.seenSwitch.on = [[person valueForKey:@"seen"] boolValue]; 

    [customCell.seenSwitch addTarget:self action:@selector(seenSwitchChanged:) forControlEvents:UIControlEventValueChanged]; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"customCell"]; 
    [self configureCell:cell atIndexPath:indexPath]; 

    return cell;  
} 
+0

Вы можете показать свой 'Tableview: cellForRowAtIndexPath:' реализации –

+0

@ Paul.s добавил реализации на почту. Спасибо –

+0

Где твои ячейки на самом деле созданы Я не вижу его в коде, который вы отправили –

ответ

0

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

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    [self setMySwitches]; 
} 

- (void)setMySwitches { 

    for (NSIndexPath *path in [self.tableView indexPathsForVisibleRows]) { 
     // like your cell config logic 
    } 
} 
Смежные вопросы