#ios #swift #xcode
#iOS #swift #xcode
Вопрос:
Я пытаюсь создать UITabBarController программно, добавив к нему несколько NavigationControllers. Когда UITabBarController содержит один NavigationController — все работает как ожидалось (см. Изображение)
Но когда я добавляю несколько NavigationControllers в UITabBarController, каждый экран становится черным (см. Другое изображение)
Такой же черный экран отображается при переключении между вкладками 1, 2, 3, 4 и 5.
Вот код, как создается UITabBarController
class TabBarViewController : UITabBarController{
override func viewDidLoad() {
super.viewDidLoad()
let controllers = [HistoryViewController.self, StatsViewController.self, DashboardViewController.self, ExpenseManagerViewController.self, ProfileViewController.self]
var navControllers: [UINavigationController] = []
controllers.forEach{ ctrl in
navControllers.append(getController(from: ctrl))
}
tabBar.tintColor = Color.green
viewControllers = navControllers
}
private func getController<TType: UIViewController>(from type: TType.Type) -> UINavigationController{
let ctrl = TType()
let navCtrl = UINavigationController(rootViewController: ctrl)
let ctrlName = String.init(describing: type.self).replacingOccurrences(of: "ViewController", with: String.empty)
navCtrl.tabBarItem.title = ctrlName
navCtrl.tabBarItem.image = UIImage(named: ctrlName)
navCtrl.navigationBar.topItem?.title = ctrlName
return navCtrl
}
}
Эти UIViewControllers создаются с использованием опции «добавить класс Cocoa Touch» и имеют файлы *.xib с некоторым минимальным дизайном (см. Еще Одно изображение)
Любая помощь относительно того, почему все экраны становятся черными при нескольких (2 и более) NavigationControllers, добавленные в TabBarController, будут высоко оценены. Спасибо
Ответ №1:
Очевидно, вы забыли, как инициализировать UIViewControllers с помощью файла xib:
private func getController<TType: UIViewController>(from type: TType.Type) -> UINavigationController{
пусть ctrl = TType(nibName: String.init(описание: type.self), bundle: nil)
let navCtrl = UINavigationController(rootViewController: ctrl)
Комментарии:
1. Спасибо, это решает мою проблему. Но появляется новый. Розетки сейчас не работают, сообщая: *** Завершение приложения из-за неперехваченного исключения ‘NSUnknownKeyException’, причина: ‘[<UIViewController 0x7f874a435670> setValue:forUndefinedKey:]: этот класс не соответствует кодированию значения ключа для outletName
2. Решена моя проблема. Спасибо за ответ
Ответ №2:
Сначала, если вы заходите с любого экрана, не вставляйте navigationbar между этим viewcontroller и tabbarcontroller, а когда вы переходите к tabbarcontroller, установленному в качестве контроллера rootview, и любой вкладке, которую вы хотите открыть, чем поместить навигационный контроллер между ними. означает, что не открывайте контроллер tabbar с иерархией navigationbar, но когда вы хотите открыть контроллер с вкладками, поместите навигационный контроллер между ними.