Highjack или предотвратить UITableView didSelectRowAtIndexPath

Я пытаюсь найти способ предотвратить или угнать didSelectRowAtIndexPath:, Когда пользователь выбирает строку в табличном представлении, я хочу сначала выдать предупреждение, говорящее: "Данные будут удалены с CD, если вы сделаете это". "Мы будем синхронизировать данные с сервером, если вы продолжите".

Пользователь нажимает да продолжить. Я хочу предотвратить выбор новой ячейки, пока синхронизация не завершится. Если синхронизация не удалась, я хочу вывести предупреждение о сбое синхронизации, а затем остановить didSelectRowAtIndexPath: от стрельбы, тем самым предотвращая выбор новой ячейки, к которой они прикоснулись.

Если синхронизация будет успешной, я хочу didSelectRowAtIndexPath: быть названным.

Будет ли лучший способ быть хай-джек willSelectRowAtIndexPath:?

2 ответа

Решение

Реализуйте метод делегата

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

и вернуться nil для соответствующего indexPath

Это остановит выбор соответствующей ячейки.

Из документов для UITableViewDelegate

Возвращаемое значение Индексный путь, который подтверждает или изменяет выбранную строку. Верните объект NSIndexPath, отличный от indexPath, если вы хотите, чтобы была выбрана другая ячейка. Верните ноль, если вы не хотите, чтобы выбранная строка.

Понял.

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {

UITableView *roomTable = tableView;
Rooms *room = [roomArray objectAtIndex:indexPath.row];
NSString *message = [NSString stringWithFormat:@"Switching rooms will remove data for current thing. Need to download %@ room", room.name];
[UIActionSheet actionSheetWithTitle:message 
                            message:@"Message" 
             destructiveButtonTitle:@"Continue" 
                            buttons:[NSArray arrayWithObjects:nil]
                         showInView:self.view 
                          onDismiss:^(int buttonIndex)
 {
     NSLog(@"User selected to change the room");
     [roomTable selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
 }
                           onCancel:^
 {
     NSLog(@"Change Room Cancelled");
 }];

return nil;   
}
Другие вопросы по тегам