2012-05-22 2 views
0

Я пишу приложение iPhone с UITableView в качестве основного пользовательского интерфейса. Каждый раздел состоит из двух строк, заголовка и тела. Когда пользователь нажимает на заголовок, я удалить вторую строку, изменив значение numberOfRowsInSection:Изменение изображения в UITableViewCell без перезагрузки ячейки

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    cbwComponent *comp = [_componentController objectInListAtIndex:section]; 
    if([comp hasContentsView] && !comp.contentsHidden){ 
     return 2; 
    }else 
     return 1; 
} 

Когда пользователь выбирает заголовок, я использую следующий код:

comp.contentsHidden = YES; 
[self.tableView beginUpdates]; 
NSArray *deleteIndexPaths = [[NSArray alloc] initWithObjects:[NSIndexPath indexPathForRow:1 inSection:indexPath.section], nil]; 
[self.tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView endUpdates]; 

Это работает отлично, с приятным плавным эффектом затухания. Проблема в том, что я пытаюсь добавить индикатор в ячейку заголовка (строка 0), которая изменяется при нажатии. Чтобы изменить это изображение, я должен обновить верхнюю строку, а также вторую строку, что делает переход выглядеть плохо (ну, не так гладко). Есть ли способ изменить изображение в UITableViewCell без обновления ячейки?

Благодаря

EDIT: я понял это! Вы можете поддерживать плавный переход до тех пор, пока вы перезагружаете эту первую строку, прежде чем внести изменения во вторую строку. Он должен быть вызван внутри [tableView beginUpdates];

[self.tableView beginUpdates]; 
[self.tableView reloadRowsAtIndexPaths:[[NSArray alloc] initWithObjects:[NSIndexPath indexPathForRow:0 inSection:indexPath.section], nil] withRowAnimation:UITableViewRowAnimationNone]; 
... 
[self.tableView endUpdates]; 

Был трюк.

ответ

1

Вы также можете подклассифицировать ячейку tableview и реализовать в ней переход вида, который можно вызвать из вашего контроллера вида. Тогда вы могли бы назвать это, не перезагружая ячейку.

[(YourCustomCell*)[tableView cellForRowAtIndexPath:indexPathOfYourCell] fadeInIndicator]; 
Смежные вопросы