Показать навигационный контроллер с кнопкой "Назад"
Я пытаюсь программно показать вид, который я уже запрограммировал, и дать ему кнопку возврата, чтобы пользователь мог легко вернуться к моему текущему виду. Вот единственный код, который я могу получить, но он не показывает кнопку возврата!
UIStoryboard *storyboard = self.storyboard;
UIViewController *root = [[[UIApplication sharedApplication] keyWindow] rootViewController];
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Privacy"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[root presentViewController:navigationController animated:YES completion:nil];
Я попытался инициализировать navigationController с помощью "корневого" viewController в приведенном выше коде, а затем протолкнуть контроллер "view" через pushViewController. Это происходит сбой, когда я пытаюсь выполнить инициализацию с "root" с отредактированной трассировкой стека.
Как программно открыть вид с помощью кнопки "Назад" для текущего вида?
Я везде смотрел на stackru, и этот нюанс сценарий не рассматривается. Пожалуйста помоги!
4 ответа
Безусловно, самое простое, что можно сделать здесь, это встроить используемый мной вид в контроллер навигации. В Интерфейсном конструкторе нажмите на представление, затем перейдите в Редактор -> Внедрить -> Контроллер навигации.
Отсюда легко скрыть панель навигации в -(void)viewWillAppear:animated:
- (void)viewWillAppear:(BOOL)animated {
//Hide the nav bar for the onboarding screens.
[[self navigationController] setNavigationBarHidden:YES animated:YES];
}
Тогда вот код для перехода на другую страницу с автоматически заполненной кнопкой "Назад":
UIStoryboard *storyboard = self.storyboard;
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:identifier];
[[self navigationController] pushViewController:controller animated:YES];
[[self navigationController] setNavigationBarHidden:NO animated:YES];
- Вы не должны использовать
presentViewController:
, но вместо этого использоватьpushViewController:
- Вы должны нажать viewController, который вы хотите представить, из viewController, который в данный момент находится на экране, и который имеет navigationController.
- Вероятно, ваш rootViewController для объекта UIWindow должен быть navigationController, а rootViewController для этого navigationController должен быть viewController, из которого вы хотите выдвинуть.
Чтобы сначала добавить контроллер навигации, вы должны поместить это в свой AppDelegate.m
UIStoryboard *sb=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc=[sb instantiateViewControllerWithIdentifier:@"View1"];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:vc];
self.window.rootViewController=nav;
чем, если вы хотите нажать на просмотр, когда вы нажали на кнопку или что-то, чего вы можете достичь с помощью:-
[self.navigationController pushViewController:ViewName animated"YES];
и если вы хотите вернуться из этого представления, вы можете просто добиться этого, нажав на Вид (в случае, если ваша кнопка "Назад"):-
[self.navigationController popViewControllerAnimated:YES];
Ваш код правильный, просто создайте пользовательскую кнопку возврата в вашем PrivacyViewController
В viewDidLoad
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow"] style:UIBarButtonItemStylePlain target:self action:@selector(goPrevious)];
И метод похож на:
- (void)goPrevious {
[self dismissViewControllerAnimated:TRUE completion:^{
}];
}