以编程方式创建选项卡栏控制器项时获取 'Unexpectedly found nil' 值
Getting 'Unexpectedly found nil' value while creating TabBar Controller items Programatically
我是 swift 的新手。我正在使用 TabBar 控制器。我已经使用故事板设置了 Tabbar 控制器和视图控制器。但出于某些设计目的,我需要以编程方式添加选项卡栏项目。当我 运行 此代码崩溃时,我的网点声明了 'Unexpectedly found nil' 值。我错过了什么吗?
提前致谢..
这是我的代码,
class TabbarController: UITabBarController,UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
tabBar.tintColor = UIColor.white
tabBarItem.title = ""
setTabBarItems()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
{
// print("hi", terminator: "")
}
func setTabBarItems(){
let v1 = MyOrderViewController()
v1.tabBarItem.image = UIImage(named: "footer_1")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v1.tabBarItem.selectedImage = UIImage(named: "footer_1")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v1.tabBarItem.title = "Orders"
v1.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v2 = FavouritesViewController()
v2.tabBarItem.image = UIImage(named: "footer_2")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v2.tabBarItem.selectedImage = UIImage(named: "footer_2")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v2.tabBarItem.title = "Favorites"
v2.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v3 = FavouritesViewController()
v3.tabBarItem.image = UIImage(named: "huggg")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
v3.tabBarItem.selectedImage = UIImage(named: "huggg")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
v3.tabBarItem.title = ""
v3.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v4 = MoreViewController()
v4.tabBarItem.image = UIImage(named: "footer_4")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v4.tabBarItem.selectedImage = UIImage(named: "footer_4")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v4.tabBarItem.title = "Account"
v4.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v5 = MoreViewController()
v5.tabBarItem.image = UIImage(named: "footer_5")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v5.tabBarItem.selectedImage = UIImage(named: "footer_5")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v5.tabBarItem.title = "More"
v5.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let controllers = [v1, v2, v3, v4, v5]
self.viewControllers = controllers
}
}
您出现问题的原因是您没有将 ViewControllers
类 与情节提要视图联系起来,因此编译器无法实例化插座。
不要使用控制器的 init
方法,而是使用 UIStoryboard
方法 instantiateViewController(withIdentifier:)
。
首先创建故事板
UIStoryboard(name: <storyboard_name>, bundle: nil)
比使用它的标识符实例化适当的 UIViewController
let controller = storyboard.instantiateViewController(withIdentifier: <your_controller_identifier>)
我是 swift 的新手。我正在使用 TabBar 控制器。我已经使用故事板设置了 Tabbar 控制器和视图控制器。但出于某些设计目的,我需要以编程方式添加选项卡栏项目。当我 运行 此代码崩溃时,我的网点声明了 'Unexpectedly found nil' 值。我错过了什么吗?
提前致谢..
这是我的代码,
class TabbarController: UITabBarController,UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
tabBar.tintColor = UIColor.white
tabBarItem.title = ""
setTabBarItems()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
{
// print("hi", terminator: "")
}
func setTabBarItems(){
let v1 = MyOrderViewController()
v1.tabBarItem.image = UIImage(named: "footer_1")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v1.tabBarItem.selectedImage = UIImage(named: "footer_1")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v1.tabBarItem.title = "Orders"
v1.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v2 = FavouritesViewController()
v2.tabBarItem.image = UIImage(named: "footer_2")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v2.tabBarItem.selectedImage = UIImage(named: "footer_2")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v2.tabBarItem.title = "Favorites"
v2.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v3 = FavouritesViewController()
v3.tabBarItem.image = UIImage(named: "huggg")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
v3.tabBarItem.selectedImage = UIImage(named: "huggg")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
v3.tabBarItem.title = ""
v3.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v4 = MoreViewController()
v4.tabBarItem.image = UIImage(named: "footer_4")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v4.tabBarItem.selectedImage = UIImage(named: "footer_4")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v4.tabBarItem.title = "Account"
v4.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let v5 = MoreViewController()
v5.tabBarItem.image = UIImage(named: "footer_5")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v5.tabBarItem.selectedImage = UIImage(named: "footer_5")?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
v5.tabBarItem.title = "More"
v5.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
let controllers = [v1, v2, v3, v4, v5]
self.viewControllers = controllers
}
}
您出现问题的原因是您没有将 ViewControllers
类 与情节提要视图联系起来,因此编译器无法实例化插座。
不要使用控制器的 init
方法,而是使用 UIStoryboard
方法 instantiateViewController(withIdentifier:)
。
首先创建故事板
UIStoryboard(name: <storyboard_name>, bundle: nil)
比使用它的标识符实例化适当的 UIViewController
let controller = storyboard.instantiateViewController(withIdentifier: <your_controller_identifier>)