2016-08-26 3 views
1

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

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 в приведенном выше коде, а затем нажав «контроллер» контроллер представления через pushViewController. Это приводит к сбоям, когда я пытаюсь инициализировать «root» с помощью отредактированной трассировки стека.

Как я могу программно открыть представление с помощью кнопки «Назад» к текущему виду?

Я искал всюду в stackoverflow, и этот нюансированный сценарий не рассматривается. Пожалуйста помоги!

ответ

0

Безусловно, проще всего сделать здесь заключается в том, чтобы внедрить представление, которое я использую, в контроллер навигации. В построителе интерфейса нажмите на представление, затем перейдите в Редактор -> Вставить -> Контроллер навигации.

Отсюда можно легко скрыть саму панель навигации в - (пустоте) viewWillAppear: анимированные:

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

Моя единственная проблема заключается в том, что ваш ответ требует, чтобы мой текущий вид находился в контроллере навигационного представления. # 2 не в нашем дизайне.Мне не нужен контроллер навигации для представления, в котором я включен, однако для представления, которое требуется представить, требуется навигационный контроллер, чтобы он мог вернуться к исходной странице. – TheJeff

0

Чтобы добавить Навигационный контроллер сначала вы должны сделать это в вашем AppDelegate.m

UIStoryboard *sb=[UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *vc=[sb instantiateViewControllerWithIdentifier:@"View1"]; 

UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:vc]; 
self.window.rootViewController=nav; 

, чем если вы хотите, чтобы нажать вид, когда вы нажали на putton или что-то вы можете достичь этого путем: -

[self.navigationController pushViewController:ViewName animated"YES]; 

и если вы хотите, чтобы вернуться с этой точки зрения вы можете просто достичь, суя View (на случай, если кнопка назад): -

[self.navigationController popViewControllerAnimated:YES]; 
+0

Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу, чтобы представление, которое я должен был находиться в контроллере навигации. Мне просто нужно добавить контроллер навигации к виду, к которому я перехожу, чтобы они могли щелкнуть кнопку «Назад», чтобы вернуться к счетчику, который не имеет навигационной панели. – TheJeff

0

Ваш код правильный, просто создавать пользовательские обратно кнопки в вашем 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:^{ 

    }]; 
}