Показать навигационный контроллер с кнопкой "Назад"

Я пытаюсь программно показать вид, который я уже запрограммировал, и дать ему кнопку возврата, чтобы пользователь мог легко вернуться к моему текущему виду. Вот единственный код, который я могу получить, но он не показывает кнопку возврата!

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];
  1. Вы не должны использовать presentViewController:, но вместо этого использоватьpushViewController:
  2. Вы должны нажать viewController, который вы хотите представить, из viewController, который в данный момент находится на экране, и который имеет navigationController.
  3. Вероятно, ваш 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:^{

    }];
}
Другие вопросы по тегам