视图控制器更改选项卡栏图标和操作

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 个视图控制器的标签栏。我们称他们为ViewController1ViewController2ViewController3

您想通过单击按钮更改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()

在您的按钮操作等中

【讨论】:

以上是关于视图控制器更改选项卡栏图标和操作的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2:更改与选项卡栏控制器相关的视图上的导航标题

在更多选项卡上时,iOS 7 选项卡栏图标暂时消失

仅使用一个视图控制器的具有多个选项卡的选项卡栏

如何在选项卡栏控制器中更新选项卡上的视图

将浮动操作按钮添加到选项卡栏控制器内的视图控制器

Xcode 旧标签栏图标突然出现