2012-06-26 4 views
0

Я пытаюсь переписать код. функция prepareForSegue запускается и показывает правильный контроллер представления, но ничего не происходит. Любые idéas по тому, что мне не хватает или что я неправильно сконфигурировал?Storyboard Segue не загружаемый вид

Посмотреть контроллер возможный путь:

A ->B (sgueResultat) 
or 
A->C (sgueStopSplash) 

Код, который выбирает SEGUE:

if (proversion) 
    [self performSegueWithIdentifier:@"sgueResultat" sender:self]; 

} 
else { 
    [self performSegueWithIdentifier:@"sgueStopSplash" sender:self]; 

} 

`

prepareForSegue, что я могу подтвердить, работает на NSLog:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
NSLog(@"Source Controller = %@", [segue sourceViewController]); 
NSLog(@"Destination Controller = %@", [segue destinationViewController]); 
NSLog(@"Segue Identifier = %@", [segue identifier]); 

NSLog выход:

2012-06-26 22:22:26.002 ClosetV2[2333:fb03] Source Controller = <ABStartViewController: 0xeb12270> 
2012-06-26 22:22:26.002 ClosetV2[2333:fb03] Destination Controller = <SplashAfterStopViewController: 0x6b2c9e0> 
2012-06-26 22:22:26.003 ClosetV2[2333:fb03] Segue Identifier = sgueStopSplash 
2012-06-26 22:22:26.003 ClosetV2[2333:fb03] sgueStopSplash 

С уважением Andreas

+0

Что такое настройка, которую нужно выполнить? Если он настроен на «push» - контроллер источника, встроенный в контроллер навигации? –

+0

Оба Segues настроены как Modal. – 90hex

+0

Являются ли segues настроены каким-либо другим способом? Кроме того, что такое четвертая строка вывода журнала? Он не включен в фрагмент кода из 'prepareForSegue: sender:', который вы включили. –

ответ

0

Убедитесь, что перетекает установлены в "модальный" в раскадровку (или обычая, если вы фантазии).

Помню, когда я впервые начал использовать segues при выходе из строя, я продолжал пытаться использовать push, что вы можете сделать, только если у вас встроенный UINavigationController. В противном случае, push-segue просто не будет функционировать.

Другая мысль ... где код ниже исполняется? Если анимация уже имеет место или если текущий вид еще не отображается на экране, он не будет функционировать должным образом. Например, если у вас есть этот код в вашем представленииDidLoad, он не будет работать.

if (proversion) 
    [self performSegueWithIdentifier:@"sgueResultat" sender:self]; 

} 
else { 
    [self performSegueWithIdentifier:@"sgueStopSplash" sender:self]; 

} 

Edit: Обновление ответа

Ожидание [самостоятельного dismissModalViewController: YES] анимация для завершения перед выполнением вашего SEGUE на самом деле раздражает и несколько неаккуратно. Я не думаю, что есть «правильный» способ сделать это. Однако, если вы поместите следующий метод внутри представления, который имеет модальный контроллер, и отправите ему сообщение после использования [self rejectModalViewController: YES], вы должны быть в хорошей форме.

- (void)waitUntilModalControllerIsDismissed 
{ 
    if(self.modalViewController) 
    { 
     [self performSelector:@selector(waitUntilModalControllerIsDismissed:) 
        withObject:nil 
        afterDelay:0.1f]; 
     return; 
    } 
    else 
    { 
     //At this point, the modal animation will be completed and you can perform your segue if you want 
    } 

} 
+0

Вероятно, это происходит из-за какого-то действия, такого как нажатие кнопки, жест или дрожание устройства. Это было бы более разумно. (Тем не менее, только гадание) –

+0

Анимация может иметь место, поскольку у меня есть [self rejectModalViewControllerAnimated: YES] ;, Подтверждено! Переход к НЕТ решил проблему.Любой способ дождаться завершения анимации? – 90hex

+0

Обновлен мой ответ, чтобы включить, как дождаться модальной анимации перед выполнением segue. – MikeS

Смежные вопросы