prepareForSegue не вызывается после performSegue: withIdentifier: в стиле всплывающего окна

У меня есть универсальное приложение, в котором я использую один и тот же контроллер для раскадровки IPad и IPhone. Я поместил UILongPressGestureRecognizer в UITableView, который при нажатии на ячейку на iPhone вызывает действие, которое выполняет переход:

-(IBAction)showDetail:(id)sender {
    UILongPressGestureRecognizer *gesture = (UILongPressGestureRecognizer*)sender;
    if (gesture.state == UIGestureRecognizerStateBegan) {
        CGPoint p = [gesture locationInView:self.theTableView];

        NSIndexPath *indexPath = [self.theTableView indexPathForRowAtPoint:p];
        if (indexPath != nil) {
            [self performSegueWithIdentifier:SEGUE_DETAIL sender:indexPath];
        }
    }
}

переход - это подробное представление, выполняемое как «нажатие». Первое, что вы должны заметить, это то, что отправителем является NSIndexPath, это единственный способ, который я нашел для передачи выбранной ячейки. Может быть, есть лучшее решение. Все работает нормально, в том смысле, что segue выполняется, и еще до вызова prepareForSegue.

Однако бывает, что на iPad я изменил идентификатор перехода на Popover. Теперь все работает частично, переход выполняется, но prepareForSegue не вызывается, и поэтому целевой контроллер представления не настроен должным образом.

Что я делаю не так?

10
задан Leonardo 12 January 2012 в 16:02
поделиться