"Push segues может использоваться только тогда, когда управляющий источник управляется экземпляром UINavigationController

У меня проблема с этим. В моем контроллере корневого представления у меня есть текстовое поле и одна кнопка. Я даю условие, как если бы я ввел 0 в текстовое поле, тогда только он должен перейти к следующему представлению. здесь он работает правильно. Но теперь это проблема. Здесь у меня есть одна кнопка и дана навигация к третьему контроллеру представления для этой кнопки. здесь я получаю ошибку как

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.'

image ref: http://img12.imageshack.us/img12/8533/myp5.png

и я даю действие для кнопки в первом представлении, как показано ниже

- (IBAction)Submit:(id)sender {

if([tf.text isEqual:@"0"])
{

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"   bundle:nil];

    SecondViewController *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewControllerID" ];

    [self presentViewController:vc2 animated:YES completion:NULL];

}  
}

Ответ 1

Посмотрев на свой скриншот, вам нужно либо

  • Нажимайте SecondViewController на существующий стек контроллера навигации вместо того, чтобы представлять его в порядке OR
  • Вам нужно встроить ваш SecondViewController в другой контроллер навигации, а затем создать и представить , который навигационный контроллер по модулю из вашего SamplesViewController

В любом случае SecondViewController необходимо встроить в контроллер навигации, прежде чем вы сможете использовать Push Segues из него

Ответ 2

Перейти к:

Редактор → Вставить In → Navigation Controller, добавить Navigation Controller в исходное представление

Ответ 3

Встраивайте свой контроллер представления в контроллер навигации или если в доске объявлений есть контроллер навигации, он будет иметь контроллер начального представления

Ответ 4

У меня также была такая же проблема. Моя проблема заключалась в том, что я использовал стиль model segue (скорее, push) для одного перед текущим контроллером, потому что я думаю, что он уже сломал цепочку навигации.

Ответ 5

Встроить контроллер вида в UINavigationController является хорошим вариантом, если в раскадровке нет UINavigationController. В противном случае вы можете выбрать UINavigationController и выбрать контроллер корневого представления в панели инспектора, а затем перетащить его в UIViewController, который вы хотите использовать как root. снимок экрана выглядит следующим образом: enter image description here

Ответ 6

Я решил это, создав пользовательский UIStoryboardSegue между UINavigationController и контроллером представления назначения:

-(void) perform
{
    assert([self.sourceViewController isKindOfClass:[MyNavigationController class]]);
    MyNavigationController *launchController = (MyNavigationController *) self.sourceViewController;
    [launchController setViewControllers:@[self.destinationViewController] animated:YES];
}

Ответ 7

Попробуйте это. Он работает для меня. Когда вы устанавливаете контроллер корневого представления для первого просмотра и используете self.presentViewController, контроллер переходит к следующему представлению, но экземпляр навигационного контроллера предназначен только для первого вида, а третий - требуемый экземпляр навигации, поэтому используйте self.navigationController вместо presentViewController.

NSString * [email protected]"Main";
                UIStoryboard *storybord=[UIStoryboard storyboardWithName:storyboardName bundle:nil];
                 SecondViewController *vc=[storybord instantiateViewControllerWithIdentifier:@"SecondViewControllerID"];
                [self.navigationController pushViewController:vc animated:YES];