Как загрузить раскадровку viewcontroller в программный контроллер вкладок в ios siwft? - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть контроллер вкладок, который сделан программно. И панель вкладок работает нормально. В stroyboard я создал firstViewController и назначил имя класса firstViewController. Когда я пытался перейти на первый vc на контроллере панели вкладок, чтобы перейти к первому viewcontroller, и он вылеталесли я даю программно, значит, он работает нормально.

Как перейти от программного контроллера панели вкладок к контроллеру раскадровки.

вот мой код контроллера панели вкладок:

 let tabBarCnt = UITabBarController()
 func createTabBarController() {

    let firstVC = FViewController()
    firstVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)

    let secondVC = SViewController()
    secondVC.tabBarItem = UITabBarItem(tabBarSystemItem: .more, tag: 1)

    let thirdVC = ViewController()
    thirdVC.tabBarItem = UITabBarItem(tabBarSystemItem: .history, tag: 2)

    let fourthVC = ViewController()
    fourthVC.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 3)


    if UIDevice.current.userInterfaceIdiom == .pad {
        let controllerArray = [firstVC, secondVC, thirdVC, fourthVC]
        tabBarCnt.viewControllers = controllerArray.map{ UINavigationController.init(rootViewController: $0)}

        self.view.addSubview(tabBarCnt.view)
    } else {
        let controllerArray = [firstVC, secondVC]
        tabBarCnt.viewControllers = controllerArray.map{ UINavigationController.init(rootViewController: $0)}

        self.view.addSubview(tabBarCnt.view)
    }

}

Вот мой первый код первого контроллера кода ViewView:

import UIKit

class FViewController: UIViewController, UITabBarDelegate {

@IBOutlet weak var firstBtn: UIButton!

@IBOutlet weak var fview: UIView!
override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor =  UIColor.blue
 // self.fview.backgroundColor = .brown


    // Do any additional setup after loading the view.
   }


}

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Пожалуйста, попробуйте ниже код. Вы можете присвоить идентификатор контроллера представления построителю интерфейса.

let tabBarCnt = UITabBarController()
func createTabBarController() {
let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
let firstVC = storyboard?.instantiateViewControllerWithIdentifier("FViewController")
firstVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)

let secondVC = storyboard?.instantiateViewControllerWithIdentifier("SViewController")
secondVC.tabBarItem = UITabBarItem(tabBarSystemItem: .more, tag: 1)

let thirdVC = storyboard?.instantiateViewControllerWithIdentifier("ViewController")
thirdVC.tabBarItem = UITabBarItem(tabBarSystemItem: .history, tag: 2)

let fourthVC = storyboard?.instantiateViewControllerWithIdentifier("ViewController")
fourthVC.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 3)

   var controllerArray = [firstVC, secondVC]
if UIDevice.current.userInterfaceIdiom == .pad {
      controllerArray += [thirdVC, fourthVC]        
} 
     tabBarCnt.viewControllers = controllerArray.map{ UINavigationController.init(rootViewController: $0)}
    self.view.addSubview(tabBarCnt.view)
}
0 голосов
/ 11 ноября 2019

Таким образом, программно-навигационный контроллер создается и затем назначается FirstVC или XVC в качестве корневого для этого навигационного контроллера. Это действие было повторено для всех вкладок.

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

По умолчанию это даст TableViewVC в качестве пользователя root для контроллера навигации

enter image description here enter image description here

...