Представление пользовательского контроллера представления вкладок, но получение черного экрана

Моя цель — отобразить контроллер представления вкладок, который управляет несколькими вкладками, состоящими из контроллеров навигации, содержащих контроллеры представлений.

Я установил контроллер представления вкладок BaseTabBarController в качестве окна моего корневого контроллера представления в AppDelegate. Мой собственный контроллер просмотра вкладок выглядит так:

class BaseTabBarController: ESTabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red

        let v1 = BaseNavigationController(rootViewController: SubscriptionsController())
        let v2 = BaseNavigationController(rootViewController: SubscriptionsController())

        v1.tabBarItem = ESTabBarItem(title: "Home", image: #imageLiteral(resourceName: "tab_bar_home"), selectedImage: #imageLiteral(resourceName: "tab_bar_home"))
        v2.tabBarItem = ESTabBarItem(title: "Home", image: #imageLiteral(resourceName: "tab_bar_home"), selectedImage: #imageLiteral(resourceName: "tab_bar_home"))

        self.viewControllers = [v1, v2]
        self.hidesBottomBarWhenPushed = true
    }
}

Мой собственный класс навигационного контроллера является пустым подклассом навигационного контроллера.

Проблема в том, что приложение отображает панель вкладок на долю секунды и сразу же превращается в черный экран (сообщение в консоли: «Представление контроллеров представления на отсоединенных контроллерах представления не рекомендуется»). Что я сделал не так?


person Cesare    schedule 03.03.2017    source источник


Ответы (1)


должно быть что-то не так с некоторыми другими частями вашего кода. когда я беру ваш код и использую его так, все работает так, как ожидалось:

class BaseTabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red

        let v1 = UINavigationController(rootViewController: UIViewController())
        let v2 = UINavigationController(rootViewController: UIViewController())

        v1.tabBarItem = UITabBarItem(title: "Home", image: nil, selectedImage: nil)
        v2.tabBarItem = UITabBarItem(title: "Home", image: nil, selectedImage: nil)

        self.viewControllers = [v1, v2]
        self.hidesBottomBarWhenPushed = true
    }
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = BaseTabBarController()
    window?.makeKeyAndVisible()

    return true
}
person André Slotta    schedule 03.03.2017
comment
Спасибо. Ты прав на 100%. Проблема заключается в корневом контроллере представления контроллеров навигации. Выглядит это так: class SubscriptionsController: UIViewController, UITableViewDelegate, UITableViewDataSource, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate { ... }. Если я верну это обратно к стандартному UIViewController(), а не к SubscriptionsController(), все будет работать нормально. Есть идеи, почему? - person Cesare; 04.03.2017
comment
Если вы покажете мне еще немного реализации SubscriptionsController, возможно, я смогу получить представление ???? - person André Slotta; 04.03.2017
comment
Обязательно, спасибо! gist.github.com/CeceXX/895f7812b1727dc05523eb763cc56b56 Это стандартный контроллер представления, загружающий табличное представление. - person Cesare; 04.03.2017
comment
ну... так как я не знаю, как именно работает ваше приложение, я бы попробовал закомментировать все вызовы (self).present[...] и попробовать еще раз. затем я бы прокомментировал их один за другим и посмотрел, где что-то идет не так. - person André Slotta; 04.03.2017
comment
о, отличный совет. СПАСИБО. Я представил полностью случайный контроллер представления. - person Cesare; 04.03.2017
comment
Рад, что смог помочь ???? - person André Slotta; 04.03.2017