2017-03-13 14 views
7

मैंने एक कस्टम टैब बार बनाया है जो टैब बार आइटम को सही तरीके से प्रदर्शित कर रहा है। जब मैं एक टैब/आइकन चुनता हूं तो टैब बार आइटम का व्यू कंट्रोलर प्रदर्शित होता है लेकिन आइकन 'चयनित छवि' आइकन में नहीं बदलता है, यानी जब उनके व्यू कंट्रोलर को दिखाया जा रहा है तो आइकन नहीं बदलते हैं।एक्सकोड में टैब बार आइटम के चयनित छवि सेट को प्रदर्शित करने के लिए कस्टम टैब बार कैसे प्राप्त करें?

मैं क्या गलत कर रहा हूं? मैं आईबी पर चयनित छवियों के रूप में सेट की गई छवियों को अपडेट करने के लिए आइकन कैसे प्राप्त कर सकता हूं? करने के लिए

class CustomTabBarController: UITabBarController, CustomTabBarDataSource, CustomTabBarDelegate { 
override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tabBar.isHidden = true 
    let customTabBar = CustomTabBar(frame: self.tabBar.frame) 
    customTabBar.datasource = self 
    customTabBar.delegate = self 
    customTabBar.setup() 
    self.view.addSubview(customTabBar) 
} 
// MARK: - CustomTabBarDataSource 
func tabBarItemsInCustomTabBar(_ tabBarView: CustomTabBar) -> [UITabBarItem] { 
    return tabBar.items! 
} 
// MARK: - CustomTabBarDelegate 
func didSelectViewController(_ tabBarView: CustomTabBar, atIndex index: Int) { 
    self.selectedIndex = index 
} 
} 


class CustomTabBar: UIView { 
var tabBarItems: [UITabBarItem]! 
var customTabBarItems: [CustomTabBarItem]! 
var tabBarButtons: [UIButton]! 

func setup() { 
tabBarItems = datasource.tabBarItemsInCustomTabBar(self) 
customTabBarItems = [] 
tabBarButtons = [] 
let containers = createTabBarItemContainers() 
createTabBarItems(containers) 
} 

func createTabBarItems(_ containers: [CGRect]) { 

var index = 0 
for item in tabBarItems { 
    let container = containers[index] 
    let customTabBarItem = CustomTabBarItem(frame: container) 
    customTabBarItem.setup(item) 
    self.addSubview(customTabBarItem) 
    customTabBarItems.append(customTabBarItem) 
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: container.width, height: container.height)) 
    button.addTarget(self, action: #selector(CustomTabBar.barItemTapped(_:)), for: UIControlEvents.touchUpInside) 
    customTabBarItem.addSubview(button) 
    tabBarButtons.append(button) 
    index += 1 
} 
} 

func barItemTapped(_ sender : UIButton) { 
let index = tabBarButtons.index(of: sender)! 
delegate.didSelectViewController(self, atIndex: index) 
} 
+0

छवियों Assets.xcassets में मौजूद है? – leanne

+0

और, क्या कोई कारण है कि आपने अपनी 'कस्टमटैबबार' कक्षा को 'यूआईटीबीबी' के बजाय 'UIView' के उप-वर्ग में सेट किया है? – leanne

उत्तर

1

बदलें

class CustomTabBar: UIView { 

:

class CustomTabBar: UITabBar { 

फिर अपने कस्टम टैब बार एक टैब बार की तरह कार्य करेगा

यहाँ मेरी कोड के कुछ है!

1

वैसे मेरे पास एक ही तरह की कार्यक्षमता थी और इस तरह UITabBarController के साथ कार्यान्वित किया गया था।

enum TabType:Int{ 
case viewController1 = 0 
case viewController2 = 1 
case viewController3 = 2 
} 

class CustomTabbarVC: UITabBarController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    convenience init(userType : UserType){ 
     self.init() 
     addViewControllers() 
     setupOnInit() 

     let tabBar = self.tabBar 
     tabBar.selectionIndicatorImage = UIImage().createSelectionIndicator(UIColor(red: 22/255, green: 52/255, blue: 89/255, alpha: 1.0), size: CGSize(width: tabBar.frame.width/CGFloat(tabBar.items!.count), height: tabBar.frame.height), lineWidth: 3.0) 
    } 


    func setupOnInit(){ 

     delegate = self 
     tabBar.barStyle = UIBarStyle.black 
     tabBar.isTranslucent = false 
    } 

    func addViewControllers(){ 

     // We will add 3 controllers 

     let viewController1 = viewController1(nibName: “viewController1”, bundle: nil) 
     let viewController2 = viewController2(nibName: “viewController2”, bundle: nil) 
     let viewController3 = viewController3(nibName: “viewController3”, bundle: nil) 

     let viewController1Navigation = UINavigationController(rootViewController: viewController1) 
     viewController1Navigation.tabBarItem = getTabbarItem(.viewController1) 
     viewController1Navigation.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0) 

     let viewController2Navigation = UINavigationController(rootViewController: viewController2) 
     viewController2Navigation.tabBarItem = getTabbarItem(.viewController2) 
     viewController2Navigation.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0) 

     let viewController3Navigation = UINavigationController(rootViewController: viewController3) 
     viewController3Navigation.tabBarItem = getTabbarItem(.viewController3) 
     viewController3Navigation.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0) 

     viewControllers = [viewController1Navigation,viewController2Navigation,viewController3Navigation] 

    } 


    func getTabbarItem(_ tabType:TabType)->UITabBarItem{ 

     // Fetch tab bar item and set image according to it. 

     var image = String() 
     var selectedImage = String() 

     if tabType == .viewController1{ 
      image = “img_viewController1_tab_nonSelected” 
      selectedImage = “img_viewController1_tab_Selected” 
     }else if tabType == .viewController2{ 
      image = “img_viewController2_tab_nonSelected” 
      selectedImage = “img_viewController2_tab_Selected” 
     }else if tabType == .viewController3{ 
      image = “img_viewController3_tab_nonSelected” 
      selectedImage = “img_viewController3_tab_Selected” 
     }else{ 
      print("Unknown tab type") 
     } 

     if let imageName:String = image,let selectedImageName:String = selectedImage{ 
      return UITabBarItem(title: nil, image: UIImage(named: imageName)?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named: selectedImageName)?.withRenderingMode(.alwaysOriginal)) 
     }else{ 
      return UITabBarItem() 
     } 
    } 

} 

extension UIImage { 
    func createSelectionIndicator(_ color: UIColor, size: CGSize, lineWidth: CGFloat) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(size, false, 0) 
     color.setFill() 
     UIRectFill(CGRect(x: 0, y: size.height - lineWidth, width: size.width, height: lineWidth)) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image! 
    } 
} 

कैसे अनुप्रयोग प्रतिनिधि में लागू करने के लिए

class AppDelegate: UIResponder, UIApplicationDelegate{ 

    var window: UIWindow? 
    var customTabbarVC: CustomTabbarVC? 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     window = UIWindow(frame: UIScreen.main.bounds) 
     customTabbarVC = customTabbarVC() // It will invoke init methods of customtabbarvc 
     window?.rootViewController = customTabbarVC // Here your tab bar controller will setup 

     return true 
    } 

    // Other APP DELEGATE METHODS 

} 

मुझे पता है कि आप किसी भी प्रश्न हैं, तो चलो ..

1

आप बटन क्लिक करने के बाद अपने कस्टम टैब बार बटन में छवि को बदलने के लिए आपको नीचे दिए गए फ़ंक्शन

func barItemTapped(_ sender : UIButton) { 
} 
में छवि को बदलने के लिए कोड लिखने की आवश्यकता है

इसी तरह

func barItemTapped(_ sender : UIButton) 
{ 
    if sender.tag == 1 
    { 
    tabBarButtons.setImage(UIImage(named:"FirstImage.png"), forState: .Normal) 
    } 
    else 
    { 
    tabBarButtons.setImage(UIImage(named:"SecImage.png"), forState: .Normal) 
    } 
} 
संबंधित मुद्दे