Как установить контроллер homeview, если использовать UITabbar в viewcontroller - PullRequest
0 голосов
/ 26 октября 2018

Я добавил отдельную панель UITabbar в viewcontroller. Сделаны все необходимые розетки. Домашний viewcontroller имеет панель вкладок. Что я хочу? Если я нажму первую кнопку, изменений не должно быть, но если щелкнуть по второму элементу панели вкладок, то должен отобразиться второй экран.

    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){
        switch item.tag {

        case 1:
            if sampleOne == nil {

                var storyboard = UIStoryboard(name: "Main", bundle: nil)

                sampleOne = storyboard.instantiateViewController(withIdentifier: "s1") as! SampleOneViewController
            }
            self.view.insertSubview(sampleOne!.view!, belowSubview: self.sampleTabBar)

            break


        case 2:
            if sampleTwo == nil {

                var storyboard = UIStoryboard(name: "Main", bundle: nil)

                sampleTwo = storyboard.instantiateViewController(withIdentifier: "s2") as! SampleTwoViewController
            }
            self.view.insertSubview(sampleTwo!.view!, belowSubview: self.sampleTabBar)

            break

        default:

            break

        }

    But it loads Homeviewcontroller first then it shows the other viewcontroller. 
    Now how should i set the homeviewcontroller(which has uitabbar in it) as first viewcontroller. 

Для помощи Анбу? enter image description here

1 Ответ

0 голосов
/ 29 октября 2018

В соответствии с документацией, если вы хотите переключаться между разными представлениями, сохраняя видовой контроллер одинаковым, используйте UITabBar.Но если вы хотите переключаться между разными viewcontrollers, UITabBarController должен быть предпочтительным способом.

Проблема, с которой вы можете столкнуться при использовании UITabBar для переключения viewcontrollers, заключается в том, что вам нужно вручную обрабатывать множество вещей.Например, добавление и удаление ваших дочерних viewcontrollers.

Но если вы все еще настаиваете на этом, используйте родительские дочерние отношения между вашими viewcontrollers.Сделайте ваш HomeViewController родительским представлением.Теперь на viewDidLoad при условии, что первый элемент выбран по умолчанию, добавьте SampleOneViewController следующим образом:

        if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s1") as? SampleOneViewController {
        self.addChildViewController(vc)
        self.view.insertSubview(vc, belowSubview: tabBar)
    }

Теперь в делегате панели вкладок необходимо сначала удалить предыдущие дочерние контроллеры представления перед добавлением элемента, выбранного индексом..

Таким образом, ваш метод делегата станет примерно таким:

func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){
    switch item.tag {

// Remove the previous child viewcontrollers
    for vc in self.childViewControllers {
        vc.willMove(toParentViewController: nil)
        vc.view.removeFromSuperview()
        vc.removeFromParentViewController()
    }


    case 1:

    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s1") as? SampleOneViewController {
        self.addChildViewController(vc)
        self.view.insertSubview(vc, belowSubview: self.view)
    }

        break


    case 2:
    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s2") as? SampleTwoViewController {
        self.addChildViewController(vc)
        self.view.insertSubview(vc, belowSubview: self.view)
    }

        break

    default:

        break

    }

Надеюсь, это поможет.

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