2010-08-13 3 views
2

Таким образом, я устанавливаю индикатор активности как вид аксессуара в ячейках просмотра таблицы, когда они выбраны.Удаление аксессуаров UITableViewCell позже?

UITableViewCell *cell = [tableVw cellForRowAtIndexPath:indexPath]; 
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
[act startAnimating]; 
[cell setAccessoryView:act]; 
[act release]; 

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

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow]; 
[cell.accessoryView removeFromSuperview]; 
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; 
+0

вы пробовали без removeFromSuperview линии? Также как зовут ваш tableView? в первом блоке кода у вас есть что-то отличное от второго. Это может быть проблемой, если это не ошибка копирования/вставки. –

+1

Получение ссылки на саму ячейку и удаление аксессуаров не будет работать. (Во-первых, вы не хотите удалять аксессуар, просто установите его на 'nil', который должен работать). Вам нужно указать в представлении таблицы перерисовать ячейку, вызвав 'reloadRowsAtIndexPaths:'. –

+0

@anschuchimala - Спасибо. Это часть пути. Настройка его на ноль, похоже, помогает, но вид активности не исчезнет и снова вернется к моей ячейке по умолчанию, пока не будет выбрана другая строка. reloadRowsAtIndexPaths, похоже, ничего не делает –

ответ

0

Вы должны иметь какой-то способ определения, требуется ли или не является объектом индикатор активности в вашем tableView:cellForRowAtIndexPath:. Например, поддерживайте словарь или массив, который хранит, сохраняет ли ячейка на пути указателя, или создает объект модели с свойством, которое представляет, загружается ли оно или нет, и т. Д.

В вашем tableView:cellForRowAtIndexPath:, проверьте, соответствует ли ячейке на этом указательном пути представление индикатора активности или нет, а если нет, установите ячейку accessoryView в nil.

Затем, чтобы удалить аксессуар вид позже: [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:theIndexPath] withRowAnimation:UITableViewRowAnimationNone];

+0

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

+0

Правильно, ячейке не требуется вид активности в качестве аксессуара, пока эта строка не будет выбрана. Я беру некоторые данные в фоновом режиме, и когда он возвращается, я хочу, чтобы ячейка вернулась к нормальной работе. –

+0

Нет, вам нужно установить ячейку в 'cellForRowAtIndexPath:' (вам необязательно запускать индикатор активности, тогда вы можете запустить его в 'didSelectRowAtIndexPath:' при желании. В противном случае, если представление таблицы перезагружает ячейку (если она прокручивается за кадром и перерабатывается и т. Д.), У вас возникнут проблемы. Вам нужно внести изменения в свою модель и обновить свое представление, чтобы отразить эти изменения, перезагрузив строки по измененным маршрутам индексов. –