У меня прозрачное табличное представление (UIViewController с подпредставлением UIImageView и другое подпредставление UITableView поверх родственного элемента UIImageView с background = clearColor, UITableViewCells background = clearColor). Я также хочу, чтобы касания в ячейках переключали accessoryType ячейки между галочкой и ни одной. Если я изменяю accessoryType UITableViewCell в tableView: didSelectRowAtIndexPath :, иногда (30-50% времени, как на симуляторе ios4.1, так и на iphone 3GS, работающем под os4.1) при переключении с accessoryType None на accessoryType, отмечайте галочкой изображение галочки окрашивается на непрозрачном белом фоне вместо прозрачного фона. Если вместо этого я перезагружаю таблицу (где accessoryType также устанавливается соответствующим образом для каждой ячейки), прозрачность работает правильно 100% времени.
Это ошибка? Или изменение ячейки в tableView: didSelectRowAtIndexPath: не правильная вещь, и вместо этого следует перезагрузить эту строку? Или что-то еще мне не хватает?
edit: вот мой код didSelectRowAtIndexPath, который показывает нежелательное поведение:
edit 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];
}
}
}