-2

I have navigation bar with baritems. i want to change color of one of item on certain event. is this possible in swift?

 let homeImage = #imageLiteral(resourceName: "home-run").withRenderingMode(.alwaysOriginal)
        let printImage = #imageLiteral(resourceName: "print").withRenderingMode(.alwaysOriginal)
        let homeButton = UIBarButtonItem(image: homeImage, landscapeImagePhone: homeImage, style: .plain, target: self, action: #selector(self.homeButtonTapped))
        let printButton = UIBarButtonItem(image: printImage, landscapeImagePhone: printImage, style: .plain, target: self, action: #selector(self.printButtonTapped))
        self.navigationItem.rightBarButtonItems = [homeButton, printButton]

I want to change image or color of particular item on any event ex. button click. Please suggest how to do this?

New iOS Dev
  • 1,937
  • 7
  • 33
  • 67

2 Answers2

0

You can change the Tint Color of all your Navigation Bar Items using this line of code:

self.navigationController?.navigationBar.barTintColor = UIColor.red

Also check out this similar question.

Hope this helps you!

christophriepe
  • 1,157
  • 12
  • 47
0

You can change your any bar button item image using this extension

 extension UINavigationItem {

    func changeBarButtonItemImage(_ item: UIBarButtonItem, image: UIImage) -> UIBarButtonItem? {

        let buttonItem = UIBarButtonItem(image: image, style: item.style, target: item.target, action: item.action)
        buttonItem.isEnabled = item.isEnabled

        if let leftIndex = self.leftBarButtonItems?.firstIndex(of: item) {
            var items: [UIBarButtonItem] = self.leftBarButtonItems!
            items[leftIndex] = buttonItem
            self.leftBarButtonItems = items
            return buttonItem
        }

        if let rightIndex = self.rightBarButtonItems?.firstIndex(of: item) {
            var items: [UIBarButtonItem] = self.rightBarButtonItems!
            items[rightIndex] = buttonItem
            self.rightBarButtonItems = items
            return buttonItem
        }

        return nil
    }
}

How to use

 if let image = UIImage(named: "home-run2" ) {
            if let buttonItem = self.navigationController?.navigationItem.changeBarButtonItemImage(homeButton, image: image) {
                      self.homeButton = buttonItem
                  }
              }
Jawad Ali
  • 13,556
  • 3
  • 32
  • 49