如何自定义单个标签栏项目的外观?

问题描述:

我需要中间标签栏项目看起来不同于其他人。这里有一个例子:如何自定义单个标签栏项目的外观?

enter image description here

我怎样才能做到这一点?

编辑: 除了中间的所有标签以标准方式对选择作出反应。选中时只有中间选项卡看起来相同。

+0

我有答案,但在目标C。你可以设置该选项卡的setSelectionIndicatorImage。您必须创建图像并将其设置为setSelectionIndicatorImage选定的选项卡,而对于其他选项卡则为零或您想要设置 –

+0

如果可以,请将其作为答案发布在objective-c中。如果它能正常工作,我会试着标记为正确的。谢谢你的评论 – user3400881

+0

好吧,我会尝试将它转换成Swift –

您应该子类UITabBarController并更改内的items阵列中第三个UITabBarItem的外观。

class CustomTabBarController: UITabBarController { 
    override func awakeFromNib() { 
     super.awakeFromNib() 

     guard let items = tabBar.items else { 
      return 
     } 

     for i in 0 ..< items.count { 
      item.image = image 
      item.selectedImage = selectedImage 

      [...] 
     } 
    } 
} 

Take a subclass of TabbarController.Remember to call `<UITabBarControllerDelegate>` 


    func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     // 
     tabBar.selectionIndicatorImage = returnImageofSelectetab() 
    } 

//Method called everytime when you select tab. 

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 

     if tabBarController.tabBar.selectionIndicatorImage == nil { 
      print("Starting point delegate: Selection indicator image is nill") 
     } 
     else { 
      print("Starting Point Of delegate: Selection indicator image is available") 
     } 

//HERE i gave index where I want to set image. 
     if tabBarController.selectedIndex == 2 { 
      tabBarController.tabBar.selectionIndicatorImage = nil 
     } 
     else { 
      tabBarController.tabBar.selectionIndicatorImage = returnImageofSelectetab() 
     } 
     if tabBarController.tabBar.selectionIndicatorImage == nil { 
      print("Ending point delegate: Selection indicator image is nill") 
     } 
     else { 
      print("Ending Point Of delegate: Selection indicator image is available") 
     } 
    } 

     func returnImageofSelectetab() -> UIImage { 
     //HERE 'img_sel' is YOUR SELECTED IMAGE SET AS BACKGROUND OF YOUR TABBARITEM 
      let selTab = UIImage(named: "img_sel")?.withRenderingMode(.alwaysOriginal) 
      let tabSize = CGSize(width: view.frame.width/5, height: 49) 
      UIGraphicsBeginImageContext(tabSize) 
      selTab?.draw(in: CGRect(x: 0, y: 0, width: tabSize.width, height: tabSize.height)) 
      let reSizeImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext() 
      UIGraphicsEndImageContext() 
      return reSizeImage! 
     }