Swift 5 поп все контроллеры перед переключением вкладки - PullRequest
0 голосов
/ 22 апреля 2019

У меня проблемы с установкой всех контроллеров, когда я нажимаю на элемент табора. У меня есть Tabbar Controller, созданный программно. То, что я пытался сделать, это ... пользователь следующие методы:

extension TabbarViewController: UITabBarControllerDelegate{

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    self.navigationController?.popViewController(animated: false)
}

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
        self.navigationController?.popViewController(animated: false)
    })
}

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    self.navigationController?.popViewController(animated: false)
    return true
}
}

AppDelegate содержит

 window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    let rootNavController = UINavigationController(rootViewController: TabbarViewController())
    UIApplication.shared.keyWindow?.rootViewController = rootNavController

1 Ответ

0 голосов
/ 22 апреля 2019

Согласно вашему коду, ваш контроллер панели вкладок является корнем контроллера навигации, поэтому self.navigationController будет ссылаться на , который контроллер навигации.Это означает, что строка:

self.navigationController?.popViewController(animated: false)

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

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

Вы должны использовать параметр viewController, чтобы обратиться к желаемомунавигационные контроллеры:

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
        (viewController as? UINavigationController)?.popToRootViewController(animated: false)
    })
}
...