我试图用我的视图控制器类控制标签栏图像。我想单击一个按钮,并更改标签栏图标。 Snapchat目前在发送快照时会这样做。
答案 0 :(得分:0)
您可以尝试按下按钮执行此代码:
viewControllerToChange.tabBarItem.image = UIImage(named: "your_image_name")
示例
假设您有一个带有3个View Controller的标签栏。我们会称他们为ViewController1
,ViewController2
,& ViewController3
您想要点击按钮更改ViewController3
内ViewController1
的标签栏图标(图片)。在ViewController1
中,您可以IBAction
处理按钮点击并更改ViewController3
中的标签栏图标,如下所示:
@IBAction func buttonAction(_ sender: Any) {
if let viewController3 = self.tabBarController?.viewControllers?[2] {
viewController3.tabBarItem.image = UIImage(named: "your_image_name")
}
}
如果您想在同一个视图控制器中更改标签栏图像,只需将self.tabBarItem.image = UIImage(named: "your_image_name")
放在按钮单击中即可。
注意强>
tabBarItem.image
不与tabBarItem.selectedImage
相同。如果在选择选项卡时需要不同的图像,则必须设置selectedImage。
答案 1 :(得分:0)
这可能为时已晚,但是对于那些路过的人,我发现了一种更轻松的方式来实现此目的。
为简便起见,请使用基类:
class BaseViewController: UIViewController {
func changeTabIcon(tab:Int){
if let tabItems = self.tabBarController?.tabBar.items {
switch tab {
case 0:
tabItems[tab].selectedImage = UIImage(named: "house_fill")
case 1:
tabItems[tab].selectedImage = UIImage(named: "folder_fill")
case 2:
tabItems[tab].selectedImage = UIImage(named: "business")
case 3:
tabItems[tab].selectedImage = UIImage(named: "cloud_fill")
default:
var _ = "something wrong"
}
}
}
然后在所有或您要单击其图标更改的ViewController中,以这种方式调用上面的方法:
class FirstViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
changeTabIcon(tab: 0)
}
}
然后在SecondViewController中,依此类推:
class SecondViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
changeTabIcon(tab: 1)
}
}
如果在加载ViewController时未更改图标,则只需调用
changeTabIcon()
在您的按钮操作等中