"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];