Несколько дочерних контроллеров представления в одном представлении контейнера

Я новичок в Swift, и мне приходится управлять несколькими контроллерами дочерних представлений в одном UIContainerView с макетом раскадровки, но представление контейнера предоставляет только одно дочернее представление одновременно.

Я уже использовал код ниже:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
var controller: UIViewController = storyboard.instantiateViewControllerWithIdentifier("HomeVC") as UIViewController
self.containerViewA.addSubview(controller.view)
self.addChildViewController(controller)

person Ashvin Gargav    schedule 07.05.2016    source источник


Ответы (1)


В ios в представлении контейнера подключайтесь только к одному дочернему контроллеру «за раз», вместо дочернего контроллера представления мы можем взять один UINavigationController с его RootviewControlle. Мы можем загрузить несколько дочерних контроллеров представления, используя несколько UINavigationController, как указано ниже.

var navController1 = UINavigationController()
var navController2 = UINavigationController()
var navController3 = UINavigationController()
var navController4 = UINavigationController()

override func viewDidLoad()
{
    super.viewDidLoad()

    //navController1
    let VC1 = self.storyboard!.instantiateViewControllerWithIdentifier("HomeVC") as! HomeVC
    navController1 = UINavigationController(rootViewController: VC1)
    navController1.navigationBarHidden = true

    //navController2
    let VC2 = self.storyboard!.instantiateViewControllerWithIdentifier("RoomControlesVC") as! RoomControlesVC
    navController2 = UINavigationController(rootViewController: VC2)
    navController2.navigationBarHidden = true

    //navController3
    let VC3 = self.storyboard!.instantiateViewControllerWithIdentifier("TelevisionVC") as! TelevisionVC
    navController3 = UINavigationController(rootViewController: VC3)
    navController3.navigationBarHidden = true

    //navController4
    let VC4 = self.storyboard!.instantiateViewControllerWithIdentifier("EntertainmentVC") as! EntertainmentVC
    navController4 = UINavigationController(rootViewController: VC4)
    navController4.navigationBarHidden = true

    let btn = UIButton()
    btn.tag = 1
    self.ActionOnSideMenuButtons(btn)
}

@IBAction func ActionOnSideMenuButtons(sender: AnyObject)
{
    for view in containerViewA.subviews{
        view.removeFromSuperview()
    }
    switch sender.tag
    {
    case 1:// Home

        NSLog("Home Button tapped")
        addChildViewController(self.navController1)
        self.navController1.view.frame = self.containerViewA.bounds
        self.containerViewA.addSubview(navController1.view)
        break

    case 2:// Room Controles
        NSLog(" Room Controles Button tapped")
        self.navController2.view.frame = self.containerViewA.bounds
        self.containerViewA.addSubview(navController2.view)
        break
    case 3:// Television
        NSLog("Television Button tapped")
        self.navController3.view.frame = self.containerViewA.bounds
        self.containerViewA.addSubview(navController3.view)
        break
    case 4:// Entertainment
        NSLog("Entertainment Button tapped")
        self.navController4.view.frame = self.containerViewA.bounds
        self.containerViewA.addSubview(navController4.view)
        break

    default:
        break
    }

}

В приведенном выше коде я создал 4 навигационных контроллера и инициализировал их в методе viewDidLoad, а в методе «ActionOnSideMenuButtons» я загружал дочерний контроллер всякий раз, когда нажималась какая-либо кнопка бокового меню.

person Ashvin Gargav    schedule 17.05.2016