视图控制器更改选项卡栏图标和操作
Posted
技术标签:
【中文标题】视图控制器更改选项卡栏图标和操作【英文标题】:View controller changing tab bar icon and action 【发布时间】:2017-02-09 16:12:05 【问题描述】:我正在尝试使用我的视图控制器类来控制标签栏图像。我想单击一个按钮并更改标签栏图标。 Snapchat 目前在发送快照时会这样做。
【问题讨论】:
进入storyboard中的tabbarcontroller并设置bartintColor Snapchat 没有标签栏:/ 这完全不同。我不想改变颜色。我想通过单击一个按钮来更改选项卡的图像。 您为此编写了什么代码?告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见How to Ask Snapchat 有一个标签栏。他们在底部有 3 个标签。当您发送 snapchat 时,相机标签会变成紫色。 【参考方案1】:您可以尝试在单击按钮时执行此代码:
viewControllerToChange.tabBarItem.image = UIImage(named: "your_image_name")
示例
假设您有一个带有 3 个视图控制器的标签栏。我们称他们为ViewController1
、ViewController2
和ViewController3
您想通过单击按钮更改ViewController1
内部ViewController3
的标签栏图标(图像)。在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 。
【讨论】:
【参考方案2】:这可能为时已晚,但对于那些路过的人来说,我找到了一种更简单的方法来做到这一点。
为方便起见,请使用基类:
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()
在您的按钮操作等中
【讨论】:
以上是关于视图控制器更改选项卡栏图标和操作的主要内容,如果未能解决你的问题,请参考以下文章