1

Я довольно новый, чтобы быстро и пытаюсь создать приложение базы данных фильмов, используя TMDB от Apiary.Программно назначить контроллер просмотра контроллеру панели табуляции

Я создал макет диспетчеров вида для одной категории. Тем не менее, я планирую иметь несколько категорий, но только разница между ними - это данные, которые я извлекаю из API. Например, клавиша «now_playing» получает список воспроизведения, а клавиша «top_rated» получает список самых популярных фильмов. Когда я изначально делал это, я создал контроллер панели вкладок в AppDelegate.swift и добавил к нему ViewControllers, получив их программно из раскадровки с помощью метода instantiateViewControllerWithIdentifier. Затем, наконец, я установил контрольные контроллеры TabBarController для двух ViewControllers, выполнив следующие действия: tabBarController.viewControllers = [nowPlayingNavigationController, topRatedNavigationController]

Это работало нормально. Позже, чтобы добавить настраиваемость, я попытался создать слайд-меню с использованием представлений контейнеров. Story board for root View Controller and Menu which is a ViewController with a tableview inside of it.

На данный момент мне не удалось встроить программно созданный контроллер панели вкладок в большой вид контейнера с правой стороны ContainerViewController. Поскольку я не мог понять, как программно это сделать, я попытался создать TabBarController в main.storyboard и дал ему StoryboardID и попытался настроить его на переменную TabBarController в AppDelegate.swift.

Tried embedding TabBarController in container

var tabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController 

позже, когда я пытаюсь изменить TabBar и назначить ранее созданные ViewControllers в TabBarController он просто не работает.

tabBarController.viewControllers = [nowPlayingNavigationController, topRatedNavigationController] 
tabBarController.tabBar.barStyle = .Black 
tabBarController.tabBar.tintColor = UIColor.orangeColor() 

Я не уверен, почему это не работает, пожалуйста, помогите мне.

Simulated Application, the TabBarController is not updating from the code in AppDelegate.swift

функция AppDelegate.Swift didFinishLaunchingWithOptions для справки

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 

    //window = UIWindow(frame: UIScreen.mainScreen().bounds) 

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

    let nowPlayingNavigationController = storyboard.instantiateViewControllerWithIdentifier("FlicksNavigationController") as! UINavigationController 
    let nowPlayingViewController = nowPlayingNavigationController.topViewController as! MoviesViewController 
    nowPlayingViewController.endpoint = "now_playing" 
    nowPlayingNavigationController.tabBarItem.title = "Now Playing" 
    nowPlayingNavigationController.tabBarItem.image = UIImage(named: "popular") 
    nowPlayingNavigationController.navigationBar.barStyle = .BlackTranslucent 

    let topRatedNavigationController = storyboard.instantiateViewControllerWithIdentifier("FlicksNavigationController") as! UINavigationController 
    let topRatedViewController = topRatedNavigationController.topViewController as! MoviesViewController 
    topRatedViewController.endpoint = "top_rated" 
    topRatedNavigationController.tabBarItem.title = "Top Rated" 
    topRatedNavigationController.tabBarItem.image = UIImage(named: "topRated") 

    topRatedNavigationController.navigationBar.barStyle = .BlackTranslucent 



    var tabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController 

    //tabBarController.viewControllers = [nowPlayingNavigationController, topRatedNavigationController] 
    tabBarController.tabBar.barStyle = .Black 
    tabBarController.tabBar.tintColor = UIColor.orangeColor() 



    //let containerViewController = storyboard.instantiateViewControllerWithIdentifier("ContainerViewController") as! ContainerViewController 
    //let mainContainerView = containerViewController.mainContainerView 

    //window?.rootViewController = tabBarController 
    //window?.makeKeyAndVisible() 


    return true 
} 
+0

Определить «просто не работает». –

+0

Просто не работает, поэтому контроллер панели вкладок не изменяется. Результатом является изображение симуляции. Контроллеры представлений, которые я назначаю контроллеру панели вкладок, не отображаются, и цвет полос вкладок не изменяется. –

+0

лучше загрузить проект в Dropbox. –

ответ

1

Я изначально не имел ни малейшего представления о том, как решить эту проблему, но кто-то помог мне, и теперь я получил это работает.

Вместо управления TabBarController в AppDelegate.swift это должно быть сделано в ContainerViewController.swift, и это должно быть сделано в методе prepareForSegue.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
    if segue.destinationViewController.isKindOfClass(UITabBarController) { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     let nowPlayingNavigationController = storyboard.instantiateViewControllerWithIdentifier("FlicksNavigationController") as! UINavigationController 
     let nowPlayingViewController = nowPlayingNavigationController.topViewController as! MoviesViewController 
     nowPlayingViewController.endpoint = "now_playing" 
     nowPlayingNavigationController.tabBarItem.title = "Now Playing" 
     nowPlayingNavigationController.tabBarItem.image = UIImage(named: "popular") 
     nowPlayingNavigationController.navigationBar.barStyle = .BlackTranslucent 

     let topRatedNavigationController = storyboard.instantiateViewControllerWithIdentifier("FlicksNavigationController") as! UINavigationController 
     let topRatedViewController = topRatedNavigationController.topViewController as! MoviesViewController 
     topRatedViewController.endpoint = "top_rated" 
     topRatedNavigationController.tabBarItem.title = "Top Rated" 
     topRatedNavigationController.tabBarItem.image = UIImage(named: "topRated") 

     topRatedNavigationController.navigationBar.barStyle = .BlackTranslucent 



     let tabVC = segue.destinationViewController as! UITabBarController 

     tabVC.viewControllers = [nowPlayingNavigationController, topRatedNavigationController] 
     tabVC.tabBar.barStyle = .Black 
     tabVC.tabBar.tintColor = UIColor.orangeColor() 

    } 
} 

Я считаю, что это должно быть сделано, поскольку TabBarController конкретизируется в раскадровке и содержится в containerView, который внутри ContainerViewController. Таким образом, способ контролировать это будет внутри метода prepareForSegue, а не в AppDelegate.swift.

Смежные вопросы