Как установить viewcontroller из UITabbarItem на viewcontroller по умолчанию при переключении вкладок? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть UITabBarController. Имеет 4 tabBarItem.

  1. Предположим, я на 1st tabBarItem defaultViewController(1) и я пошел к другому ViewController(2), который показан после некоторого действий в первом defaultViewController(1).
  2. Затем я переключился на 2nd tabBarItem defaultViewcontroller(2).
  3. Я снова переключился на 1st tabBarItem, он показывает ViewController(2).

    Я хочу показать defaultViewController(1). Как я могу добиться этого, используя swift 4.

defaultViewController(1) и defaultViewController(2) являются значениями по умолчанию ViewController для 1-го и 2-го TabBarItem соответственно. ***

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Допустим, у вас есть UINavigationController внутри каждой вкладки UITabBarController , и defaultViewController (1) является rootViewController вашей первой вкладки, внутри которого есть кнопка для перехода к ViewController (2) .

Для этого прежде всего давайте создадим общее решение. Создайте UIApplication Расширение, как это,

extension UIApplication {
    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return topViewController(controller: navigationController.visibleViewController)
        }
        return controller
    }
}

Реализация UITabBarControllerDelegate в AppDelegate и выполнение приведенного ниже кода,

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    if tabBarController.selectedIndex == 0 {
        UIApplication.topViewController()?.navigationController?.popToRootViewController(animated: false)
    }
}

В приведенном выше коде я взял tabBarController.selectedIndex в 0, вы можете сделать его различным в зависимости от ваших требований.

Дайте мне знать, если возникнут какие-либо вопросы.

0 голосов
/ 09 мая 2018

Расширьте подкласс UITabbarController и используйте его в качестве класса вашей вкладки.В этом устройстве UITabBarControllerDelegate, didSelect и используйте popToRootViewController, чтобы открыть ваш defaultViewController.

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController){

    if viewController is UINavigationController {
        //when you have `UINavigationController`
        let rootNavigationController = viewController as! UINavigationController
        rootNavigationController.popToRootViewController(animated: false)
    } else {
        //when you don't have `UINavigationController` then dismiss all viewcontroller that was presented.
        let rootViewController = viewController
        if rootViewController.presentingViewController != nil {
            rootViewController.dismiss(animated: false, completion: nil)
        }
    }
}

Примечание: добавить self.delegate = self, чтобы согласовать протокол внутри viewDidLoad метод.

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