2016-06-23 4 views
1

Моя цель - всякий раз, когда я нажимаю кнопку на контроллере первого представления, она переходит к другому контроллеру, который является навигационным контроллером.Как создать контроллер навигации с другого контроллера?

firstViewController и secondViewController не имеют связи или что-то еще.

Изображение

enter image description here

Я использовал этот код

@IBAction func buttonTapped(sender: UIButton) { 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = storyboard.instantiateViewControllerWithIdentifier("secondViewCtrl") as! SecondViewController 
    self.presentViewController(vc, animated: true, completion: nil) 

} 

Причина, почему я instatiate так, чтобы я мог передать данные, как

vc.name = "Myname" 

Проблема с этим кодом является что он не представляет навигационную панель, а также панель вкладок. Что мне делать, чтобы показать их?

ОБНОВЛЕНО вопрос

@IBAction func buttonTapped(sender: UIButton) { 
    guard let tabBarController = tabBarController else { return } 
      tabBarController.selectedIndex = 1 


      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let vc = storyboard.instantiateViewControllerWithIdentifier("trackYourGenie") as! TrackYourGenieViewController 
      let navController = tabBarController.viewControllers![1] 
      let secondViewController = navController.topViewController 
      vc.name = "Myname" 


} 

ответ

2

Безопасный подход:

guard let tabBarController = tabBarController else { return } 
tabBarController.selectedIndex = 1 

Если вам необходимо получить доступ к вашему tabBarController пройти ДАННЫЕ вы можете сделать просто:

let navController = tabBarController.viewControllers[1]! as! UINavigationController 
let secondViewController = navController.topViewController 

Ваш метод может быть:

@IBAction func buttonTapped(sender: UIButton) { 
    guard let tabBarController = tabBarController else { return } 
    let navController = tabBarController.viewControllers[1]! as! UINavigationController 
    let secondViewController = navController.topViewController as! SecondViewController 
    secondViewController.name = "my name" 
    tabBarController.selectedIndex = 1 
} 
+0

, где я могу это поставить? на взгляд действительно груз? – airsoftFreak

+0

@airsoftFreak вы можете поместить его в свою кнопкуTapped –

+0

Im вообще новый в этом, не могли бы вы показать его в полном коде. Спасибо – airsoftFreak

1

В вашем случае, следующий код должен быть достаточно:

self.tabBarController.selectedIndex = 1 

Как UITabBarController ваш rootViewController, вы можете получить доступ к нему с self.tabBarController. Вам не нужно создавать экземпляр UINavigationController, как и в раскадровке.

+0

Когда я делаю это на viewDidLoad, я получаю nil на tabBarController – airsoftFreak

1

Я вижу на вашем StoryBoard, что у вас есть TabBarController. Если ваша конфигурация, что и FirstViewController находится на первую вкладку и SecondViewController на второй вкладке, вы можете просто изменить TabBarController SelectedIndex свойства:

@IBAction func buttonTapped(sender: UIButton) { 

    tabBarController?.selectedIndex = 1 
} 

Если вы хотите передать данные SecondViewController вы можете попробовать одно из следующих решений:

  1. let controller = tabBarController.viewControllers[1] as SecondViewController! controller.data = "some data" Эта душа не может работать, так как SecondViewController еще не готов.
  2. Создать одноэлементный класс, где для сохранения данных, а затем восстановить данные в методе SecondViewController viewDidLoad
  3. Сохранить данные в UserDefaults, а затем получить данные в методе SecondViewController viewDidLoad (плохое решение, если информация не должны быть стойкими)
  4. Продлить UITabBarController и использовать его, создать пользовательский вар в tabBarController, поместить данные в этой переменной, а затем восстановить данные в методе SecondViewController viewDidLoad

Тогда четкие данные, если это необходимо.

+0

Где я могу это поставить? in viewdidload? – airsoftFreak

+0

В вашем методе buttonTapped IBAction посмотрите обновленный ответ – lubilis

+0

Скажите, если я хочу передать данные другому viewController, как бы я это сделал? Я обновил свой вопрос. – airsoftFreak

0

Навигация не будет работать с firstViewController, так как мы будем использовать что-то, что нужно UINavigationController.

Попробуйте Как это

enter image description here

2

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

@IBAction func buttonTapped(sender: UIButton) { 

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc = storyboard.instantiateViewControllerWithIdentifier("Navigation Controller Id") as! UINavigationController 
self.presentViewController(vc, animated: true, completion: nil) 

} 

Приведенный выше код должен содержать навигационную панель.

+0

Это ошибка, вам не нужно повторно создавать экземпляр только существующего навигационного контроллера, это пустая трата памяти. –

Смежные вопросы