У меня есть прозрачный вид таблицы (UIViewController с subview UIImageView и другой subview UITableView на вершине Ubuntu UIImageView с фоном = clearColor, UITableViewCells background = clearColor). Я также хочу, чтобы клавиши на ячейках переключали атрибут cellType между галочкой и ничем. Если я изменяю аксессуар типа UITableViewCell в tableView: didSelectRowAtIndexPath: иногда (30-50% времени, как на симуляторе ios4.1, так и на 3GS iphone, работающем os4.1) при переключении с аксессуараType None на принадлежностьType галочка с галочкой окрашивается в непрозрачный белый фон вместо прозрачного фона. Если вместо этого я перезагружаю таблицу (там, где атрибут принадлежности также устанавливается соответственно для каждой ячейки), прозрачность работает правильно в 100% случаев.Проблема с модификацией UITableViewCell accessoriesType в tableView: didSelectRowAtIndexPath:
Это ошибка? Или модифицирует ячейку в tableView: didSelectRowAtIndexPath: не правильная вещь, и эта строка должна быть перезагружена вместо этого? Или есть что-то еще, что мне не хватает?
редактировать: Вот мой didSelectRowAtIndexPath код, который показывает нежелательное поведение:
редактировать 2: Еще одна деталь того, что происходит. Это самый конец анимации отмены выбора, где возникает проблема. Флажок появляется и отображается правильно & прозрачно, пока выполняется анимация отмены выделения, и синяя подсветка постепенно исчезает. После того, как анимация отмены выбора закончится, а синий исчезнет, возможно, 1/10 секунды после того, как цвет выделения полностью исчезнет, когда аксессуар галочки «автоматически» становится непрозрачным без дополнительного ввода пользователем.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.editing)
{
}
else
{
[self.myTableView deselectRowAtIndexPath:indexPath animated:YES];
UITableViewCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath];
// toggle the selection status of the selected row
//
NSNumber *rowObj = [NSNumber numberWithUnsignedInt:indexPath.row];
if ([self.selectedRows containsObject:rowObj])
{
// currently selected, now de-select
//
cell.accessoryType = UITableViewCellAccessoryNone;
[self.selectedRows removeObject:rowObj];
}
else
{
// currently unselected, now select
//
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[self.selectedRows addObject:rowObj];
}
}
}
Можете ли вы разместить код PLZ? – MathieuF
ok отправил код didSelectRowAtIndexPath («сломанный»). Если я прокомментирую строки cell.accessoryType и добавлю [tableView reload] внизу, тогда прозрачность всегда работает. – Bogatyr
Изменяет ячейку с помощью ручного вызова на [self.myTableView cellForRowAtIndexPath: indexPath]; полностью фиктивный? Я видел это в некотором коде в сети («так должно быть правдой!») И просто скопировал его. Есть ли какая-либо гарантия того, что UITableView чтит изменения в ячейке, выполненной таким образом? Основываясь на том, что я вижу, ответ кажется «не обязательно» .... – Bogatyr