Подтвердить что ты не робот

PrepareForSegue вызывается до didSelectRowAtIndexPath только при добавлении третьего segue

У меня есть 3 segues до 3 разных просмотров. 2 реализованы без проблем, а когда создается третье, что возникают проблемы.

У меня есть следующий метод didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@" ----------  did select row");

    if(indexPath.section == 0){
        if(indexPath.row == [self.data count]-1){
            //prior to adding this, everything works
            [self performSegueWithIdentifier:@"MoreComments" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }else if(indexPath.section == 1){
        if(indexPath.row == [self.data2 count]-1){
            [self performSegueWithIdentifier:@"MorePosts" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }
}

У меня есть следующий метод prepareForSeque:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"MorePosts"]){
        MorePostsViewController *mfamvc = segue.destinationViewController;
        mfamvc.data = self.data;
    }else if([segue.identifier isEqualToString:@"FriendView"]){
        FriendViewController *fvc = segue.destinationViewController;
        fvc.friend = friend;
    }else if([segue.identifier isEqualToString:@"MoreComments"]){
          MoreCommentsViewController *mcvc = segue.destinationViewController;
          mcvc.data = self.data2;
    }
}

Прежде чем управлять перетаскиванием из моей ячейки в последнее представление, я вижу, что моя программа хитов didselectrow, а затем prepareforseque. Это делает работу над навигацией идеальной.

Как только я управляю перетаскиванием из своей ячейки в контроллер MoreCommentsViewController, я начинаю видеть ошибку:

Вложенная анимация push может привести к повреждению панели навигации Завершение навигации в непредвиденном состоянии. Дерево видимости панели навигации может быть повреждено.

Я замечаю, что теперь также prepareforseques вызывается дважды, с подготовкой к вызову сначала, затем didselectrow, затем снова подготовьте для повтора.

Что я делаю неправильно, чтобы условно перейти к этим различным представлениям?

4b9b3361

Ответ 1

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

Также можно найти здесь: Условный сеанс выполняется при нажатии на UITableViewCell

Ответ 2

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

segue между контроллерами представлений

Теперь вы можете выбрать этот новый сегмент, перейти к "инспектору атрибутов" (option + command + 4) и предоставить идентификатор раскадровки, который вы можете ссылаться в коде при вызове performSegueWithIdentifier.