查看控制器更改标签栏图标和操作

时间:2017-02-09 16:12:06

标签: ios swift uibutton uitabbar

我试图用我的视图控制器类控制标签栏图像。我想单击一个按钮,并更改标签栏图标。 Snapchat目前在发送快照时会这样做。

2 个答案:

答案 0 :(得分:0)

您可以尝试按下按钮执行此代码:

viewControllerToChange.tabBarItem.image = UIImage(named: "your_image_name")

示例

假设您有一个带有3个View Controller的标签栏。我们会称他们为ViewController1ViewController2,& ViewController3

您想要点击按钮更改ViewController3ViewController1的标签栏图标(图片)。在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()

在您的按钮操作等中