Представление представления из делегата приложения с помощью панели вкладок Контроллер -> Контроллер навигации -> Иерархия представлений — iOS Swift

Я искал в SO и нашел похожие статьи, но ни одно из решений не сработало для меня. Ниже приведен скриншот моей иерархии представлений введите здесь описание изображения

Один из многих фрагментов кода, которые я пробовал, выглядит следующим образом:

            var storyBoard = UIStoryboard()
            if UIDevice.current.userInterfaceIdiom == .pad {
                storyBoard = UIStoryboard(name: "iPad", bundle: nil)
            } else {
                storyBoard = UIStoryboard(name: "Main", bundle: nil)
            }


            let tabVc = self.window?.rootViewController as! UITabBarController


            let mynVC = storyBoard.instantiateViewController(withIdentifier: "nav") as! UINavigationController


            let calcVc = storyBoard.instantiateViewController(withIdentifier: "destVc")


            tabVc.present(mynVC, animated: true, completion: { () -> Void in
              // Segue , do stuff

            })

Приведенный выше код представляет правильную вкладку с панелью навигации, но вкладки нет.

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


person Jerland2    schedule 07.03.2017    source источник
comment
Почему контроллер представления панели вкладок представляет контроллер навигации? Вам нужно установить контроллер навигации в качестве текущего контроллера в контроллере представления панели вкладок. Вероятно, вам нужно установить массив контроллеров представления на контроллере представления панели вкладок, где этот навигационный контроллер является одним из элементов массива.   -  person Matic Oblak    schedule 07.03.2017


Ответы (1)


В данный момент я не могу полностью протестировать это, но я считаю, что на панели вкладок вы не представляете контроллер представления. вы устанавливаете его элементы контроллера представления и свойства selectedViewController.

Это должно работать, я проверю это и обновлю в ближайшее время,

var storyBoard = UIStoryboard()
        if UIDevice.current.userInterfaceIdiom == .pad {
            storyBoard = UIStoryboard(name: "iPad", bundle: nil)
        } else {
            storyBoard = UIStoryboard(name: "Main", bundle: nil)
        }


        let tabVc = self.window?.rootViewController as! UITabBarController

        let mynVC = storyBoard.instantiateViewController(withIdentifier: "nav") as! UINavigationController

        let calcVc = storyBoard.instantiateViewController(withIdentifier: "destVc")

        tabVc.viewControllers = [mynVC]
        tabVc.selectedViewController = mynVC

В зависимости от того, что еще у вас есть ниже, вам также может потребоваться вызвать window.setKeyAndVisible(), чтобы фактически показать

person Scriptable    schedule 07.03.2017
comment
Сработало отлично, в итоге я отредактировал tabVc.viewController = [mynVC], чтобы добавить другую вкладку в мой настоящий проект. Кажется, это дает именно тот результат, который я искал. Спасибо, проверим, а затем отметим как принятый ответ. - person Jerland2; 07.03.2017
comment
Отлично, рад помочь :) Удачи в проекте - person Scriptable; 07.03.2017
comment
Быстрый вопрос, если бы я хотел показать контроллер представления, а затем перейти к другому с этой реализацией. Могу ли я просто позвонить calcVc.performsegue(withIdentifier: testSegue, sender: self)? - person Jerland2; 07.03.2017
comment
Да, вы должны быть в состоянии сделать это без каких-либо проблем. Пока переход зарегистрирован - person Scriptable; 07.03.2017