Контроллер панели вкладок исчезает при возврате к другому представлению

#ios #swift #xcode #uinavigationbar #segue

#iOS #swift #xcode #uinavigationbar #segue

Вопрос:

Я хочу создать приложение, которое позволяет пользователю нажимать на кнопку V1 на панели навигации. Это приведет к переходу к версии V2, где они могут нажать другую кнопку на панели навигации в версии V2, и это вернет их к версии V1, в которой внизу находится контроллер панели вкладок. Мне не нужна панель вкладок в версии V2, и я не хочу, чтобы V2 был элементом панели вкладок. Когда я пытаюсь это сделать, панель вкладок исчезает на V1, когда я возвращаюсь к V1 из V2.

КОНТРОЛЛЕР ПАНЕЛИ ВКЛАДОК -> ЭЛЕМЕНТ ПАНЕЛИ ВКЛАДОК (V1) -> V2 (через элемент кнопки панели навигации на V1) -> вернуться к V1 (через элемент кнопки панели навигации на V2)

Я добавил [self.navigationController, popViewControllerAnimated:YES]; в свою функцию кнопки, но она выдает ожидаемое выражение с ошибкой в литерале контейнера.

Кроме этого кода, у меня пока нет другого кода в моем приложении.

Я использую Xcode 8.0 и Swift 3.0

Комментарии:

1. вы упомянули, что используете Swift 3.0, но добавленная вами функция находится в Obj-c?

Ответ №1:

Сначала создайте подкласс UITabBarController , затем добавьте свойства в AppDelegate

 var navController: UINavigationController?
var tabController: MyTabController?
  

Если вы хотите показать контроллер панели вкладок при запуске приложения, введите этот код в AppDelegate didFinishLaunchingWithOptions

  self.window = UIWindow(frame: UIScreen.main.bounds)
 let myStoryboard = UIStoryboard(name: "Main", bundle: nil) as UIStoryboard
 self.tabController = myStoryboard.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController
//self.navController = UINavigationController(rootViewController: self.tabController!)
//self.window?.rootViewController = self.navController
 self.window?.rootViewController = self.tabController
 self.window?.makeKeyAndVisible()
 return true
  

Если вы хотите перейти на панель вкладок после входа в систему или что-то еще, добавьте свойство к этому контроллеру

  var appDelegate: AppDelegate!
  

в viewDidLoad

  appDelegate = UIApplication.shared.delegate as? AppDelegate
  

И метод должен выглядеть

  func logIntoApp() {

    appDelegate.tabController = self.storyboard?.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController
    appDelegate.window?.rootViewController = appDelegate.tabController
 }
  

Затем в вашем контроллере представления элемента вкладки создайте свойство AppDelegate и назначьте делегат, как указано выше.

И методы должны быть такими :

 @IBAction func showWithTab(_sender: AnyObject) {

      let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController
      self.navigationController?.pushViewController(DefaultVC, animated: true)
}

@IBAction func showWithoutTab(_sender: AnyObject) {

      let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController

    // You can create your own animation
      UIView.transition(from: (appDelegate.tabController?.view)!, to: (appDelegate.navController?.view)!, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in

      self.appDelegate.window?.rootViewController = self.appDelegate.navController
    }

    // OR you can use like this way
      UIView.transition(from: self.view, to: DefaultVC.view, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in

      self.appDelegate.window?.rootViewController = self.appDelegate.navController
    }
}
  

Ответ №2:

Почему бы не использовать простую панель вкладок? Что-то вроде этого:

введите описание изображения здесь

и в VC1 :

  override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    myTab.removeFromSuperview()
}
  

Комментарии:

1. Когда я возвращаюсь к представлению с помощью панели вкладок, панель вкладок исчезла.

2. Когда я устанавливаю переход на VC2 с помощью контроллера навигации и переход от VC2 обратно к VC1 с помощью push-перехода в контроллере навигации, элемент кнопки панели, который я добавил на панель навигации на VC2, исчез. Извините, если мой вопрос не имеет смысла, но то, что я хочу сделать, это связать два VC с панелью вкладок. Затем на одном из VC я хочу иметь элемент кнопки панели на панели навигации, который позволяет перейти к другому VC, в котором не реализована панель вкладок. На этом VC у меня есть еще один элемент кнопки панели на панели навигации, который позволяет мне вернуться к моему VC с помощью панели вкладок. Спасибо.

Ответ №3:

Я решил свою проблему после нескольких дней попыток найти ответ. Вам нужно добавить это в любой контроллер представления.

 @IBAction func unwindToViewController (sender: UIStoryboardSegue){

    }
  

Затем вы можете добавить элемент кнопки перехода от панели к значку выхода на контроллере представления.

Вы можете просмотреть изображение сцены VC здесь.