【问题标题】: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 时,相机标签会变成紫色。

标签: ios swift uibutton uitabbar


【解决方案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()

    在您的按钮操作等中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 2014-07-30
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多