Как установить UINavigationController как root из UITabBarController.? - PullRequest
1 голос
/ 17 февраля 2020

Я работаю над приложением, в котором пользователю показывается Логин, после успешного входа пользователь попадает на панель управления. где показаны 4 вкладки для перехода к соответствующему использованию. Я должен использовать UITabBarController для четырех вкладок на приборной панели и UINavigationController для навигации из LoginView.

Я установил свой UITabBarController на navigationController, когда пользователь успешно вошел в систему. Каждое представление будет иметь одну кнопку выхода из системы, на щелчок, для которого я должен установить свой navigationcontroller обратно на root.

Вот пример кода, который я сделал.

  1. Мой UITabBarController

    class TabBarV C: UITabBarController {

    let dashboardViewObj = DashboardVC()
    let registerViewObj = RegisterVC()
    let alertViewObj = AlertVC()
    let historyViewObj = HistoryVC()
    override func viewDidLoad() {
        super.viewDidLoad()
        self.viewControllers = [dashboardViewObj, registerViewObj,historyViewObj,alertViewObj]
        // Do any additional setup after loading the view.
    
        dashboardViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)
        registerViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .history, tag: 0)
        historyViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 0)
        alertViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 0)
    }
    
  2. В моем LoginViewContoller

let tabbarObj = TabBarV C ()

@IBAction func loginBtnClicked(_ sender: Any) {        
            self.navigationController?.setViewControllers([tabbarObj], animated: true)
        }

Теперь при нажатии кнопки выхода из любого из этих представлений мне нужно установить navigationController как root. Как это сделать ...?

Следующая таблица поможет понять, что мне нужно. Будет оказана любая помощь.

enter image description here

Ответы [ 3 ]

2 голосов
/ 17 февраля 2020

@ frzi: - Большое спасибо за ответы и исправления в разделе комментариев.

Я просто сделал то, что вы предложили. Следующая строка исправлена ​​в моем LoginViewController.

self.navigationController?.setViewControllers([tabbarObj], animated: true)

К обновленной строке как

self.navigationController?.pushViewController(tabbarObj, animated: true)

А при действии кнопки выхода из системы просто добавили строку,

self.tabBarController?.navigationController?.popViewController(animated: true)

и это сработало ... Ура J ...

1 голос
/ 17 февраля 2020

Когда вы входите в систему, все, что вам нужно, чтобы ввести этот код в действие кнопки выхода из системы, и оно перенаправит вас на страницу входа.

   var window: UIWindow?
   let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate

      let VC = self.appDelegate.storyboard1.instantiateViewController(withIdentifier: "Your controller name") as! loginViewController
            self.appDelegate.navigationController = UINavigationController(rootViewController: VC)
            self.appDelegate.navigationController?.navigationBar.isHidden = true
            self.appDelegate.window?.rootViewController = self.appDelegate.navigationController
            self.appDelegate.window?.makeKeyAndVisible()

это будет работать.

1 голос
/ 17 февраля 2020

Вы можете легко использовать функцию размотки, вместо установки root контроллера представления или всплывающего контроллера или даже отклонения методов!
См. это для полного описания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...