How to set the images for UITabBarItems without having titles? - ios

I had an application in which I am adding the images for the UITabBarItems programatically like this..
UIImage *selectedImage0 = [UIImage imageNamed:#"home_hvr.png"];
UIImage *unselectedImage0 = [UIImage imageNamed:#"home.png"];
UIImage *selectedImage1 = [UIImage imageNamed:#"star_hvr.png"];
UIImage *unselectedImage1 = [UIImage imageNamed:#"star.png"];
UITabBar *tabBar = self.tabbarcontroller.tabBar;
self.tabbarcontroller.tabBar.barStyle = UIBarStyleBlack;
self.tabbarcontroller.tabBar.translucent = NO;
UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
[item0 setSelectedImage:[selectedImage0 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item0 setImage:[unselectedImage0 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item1 setSelectedImage:[selectedImage1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item1 setImage:[unselectedImage1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
since the tabbaritems doesn't have any titles it will bring a blank space at the bottom of the tab-bar pulling the image above the tab bar,I need no titles but needs to put my image inside the tab bar completely.
Can any body guide me on this?

UITabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
was done this trick worked for me .thanks

Try below code:
[[self.tabBarController.tabBar.items objectAtIndex:0] setFinishedSelectedImage:[UIImage imageNamed:#"offer_btn_active.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"offer_btn.png"]];
[[self.tabBarController.tabBar.items objectAtIndex:1] setFinishedSelectedImage:[UIImage imageNamed:#"merchant_btn_active.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"merchant_btn.png"]];

Related

NSRangeException indexOutOfBound

I am using code that I made in another application. In the other application the code is working fine. What I do is while loading splashViewController the images of slideShow are being downloaded and cached. When the download is finished it will present the mainviewcontroller which is a maintableviewcontroller. Here is the code that I am using:
UIImage* tabBarBackground = [UIImage imageNamed:#"tabBar.png"];
[[UITabBar appearance] setBackgroundImage:tabBarBackground];
UITabBarController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:#"barController"];
UITabBar *tabBar = rootViewController.tabBar;
UITabBarItem *tabBarItem1 = tabBar.items[0];// the error here happening event if i comment out this line the error is hapen at the next uibar items
UIImage *selectedLogo = [[UIImage imageNamed:#"productSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *unselectedLogo = [[UIImage imageNamed:#"product"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[tabBarItem1 setImage:unselectedLogo];
[tabBarItem1 setSelectedImage:selectedLogo];
[tabBarItem1 setTitle:#"My Product"];
UITabBarItem *tabBarItem2 = tabBar.items[1];
UIImage *selectednews = [[UIImage imageNamed:#"notificationSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *unselectednews = [[UIImage imageNamed:#"notification"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[tabBarItem2 setImage:unselectednews];
[tabBarItem2 setSelectedImage:selectednews];
[tabBarItem2 setTitle:#"Notifications"];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
UIImage *selectedLocation = [[UIImage imageNamed:#"locationSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *unselectedLocation = [[UIImage imageNamed:#"location"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[tabBarItem3 setImage:unselectedLocation];
[tabBarItem3 setSelectedImage:selectedLocation];
[tabBarItem3 setTitle:#"Locate Us"];
UITabBarItem *tabBarItem4 = tabBar.items[3];
UIImage *selectedaboutus = [[UIImage imageNamed:#"moreSelected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *unselectedaboutus = [[UIImage imageNamed:#"more"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[tabBarItem4 setImage:unselectedaboutus];
[tabBarItem4 setSelectedImage:selectedaboutus];
[tabBarItem4 setTitle:#"More"];
[self.loadingActivityIndicator stopAnimating];
[self.navigationController popToRootViewControllerAnimated:YES];
[self presentViewController:rootViewController animated:YES completion:nil];
Please put a count check for tabbar.items first and then access all tab bar items :
if(tabbar.items.count==tabCount) //tabCount is number of tabs in your tabbar
{
UITabBarItem *tabBarItem1 = tabBar.items[0];
//<remaining code>
}else
{
//either tabbar is nil or tabbar doesn't not have any tabs, so handle accordingly
}
Also, since the tabbar is working fine in another application, please check your StoryBoard if it correctly creates and binds the tabbar for the rootViewController.
Here is a good post with detailed steps to create tabbar correctly using Storyboards which can help you debug/verify if you created the bindings and segues correctly:
https://guides.codepath.com/ios/Using-Tab-Bar-Controllers

How to set image for tabbar item in ios 6 and ios 7

How to set image for tabbar item in ios 6 and ios 7. My tabbar only run in ios 7 because imageWithRenderingMode method is not run in ios 6. How to set tab bar item run in ios 6 and 7. Thank in advance. This is my code.
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UITabBar *tabBar = tabBarController.tabBar;
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
tabBarItem1.title = #"Phim mới";
tabBarItem2.title = #"Xem phim";
tabBarItem3.title = #"GS Xoay";
tabBarItem4.title = #"Về chúng tôi";
[tabBarItem1 setImage:[[UIImage imageNamed:#"ic1.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem2 setImage:[[UIImage imageNamed:#"ic2.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem3 setImage:[[UIImage imageNamed:#"ic3.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem4 setImage:[[UIImage imageNamed:#"ic4.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
return YES;
You need to check to see if the method exists at runtime:
UIImage *image1 = [UIImage imageNamed:#"ic1.jpg"];
if ([image1 respondsToSelector:#selector(imageWithRenderingMode:)]) {
[tabBarItem1 setImage:[image1 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[tabBarItem2 setImage:[[UIImage imageNamed:#"ic2.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem3 setImage:[[UIImage imageNamed:#"ic3.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem4 setImage:[[UIImage imageNamed:#"ic4.jpg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
} else {
[tabBarItem1 setImage:image1];
[tabBarItem2 setImage:[UIImage imageNamed:#"ic2.jpg"]];
[tabBarItem3 setImage:[UIImage imageNamed:#"ic3.jpg"]];
[tabBarItem4 setImage:[UIImage imageNamed:#"ic4.jpg"]];
}
I suggest you read the "SDK Compatibility Guide" in the documentation.

Customize UITabBarItem in UINavigationController

How can I change background color of UITabBarItem? I need something like this:
(color under wallet)
To add an image
UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;
//tab1
UIImage *selectedImage = [UIImage imageNamed:#"home-tab-selected"];
UIImage *unselectedImage = [UIImage imageNamed:#"home2-tab"];
MyTabBar *tabBar = (MyTabBar *)tabController.tabBar;
UITabBarItem *item1 = [tabBar.items objectAtIndex:0];
[item1 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];
//tab2
selectedImage = [UIImage imageNamed:#"customers-tab-selected"];
unselectedImage = [UIImage imageNamed:#"customers-tab"];
UITabBarItem *item2 = [tabBar.items objectAtIndex:1];
[item2 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];
//tab3
selectedImage = [UIImage imageNamed:#"maps-tab-selected"];
unselectedImage = [UIImage imageNamed:#"maps-tab"];
UITabBarItem *item3 = [tabBar.items objectAtIndex:2];
[item3 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];
//tab4
selectedImage = [UIImage imageNamed:#"reports-tab-selected"];
unselectedImage = [UIImage imageNamed:#"reports-tab"];
UITabBarItem *item4 = [tabBar.items objectAtIndex:3];
[item4 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];
//tab5
selectedImage = [UIImage imageNamed:#"orders-tab-selected"];
unselectedImage = [UIImage imageNamed:#"orders-tab"];
UITabBarItem *item5 = [tabBar.items objectAtIndex:4];
[item5 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];
if ([tabBar respondsToSelector:#selector(setBackgroundImage:)])
{
// ios 5 code here
[tabBar setBackgroundImage:[UIImage imageNamed:#"tab-bg"]];
}
Take a look at the appearance proxy of UITabbarItem, particularly for the method -selectedImage(doc).
Just pay attention that in iOS7 most of those images are rendered as templates (I don't know in tab bar item) so you should specify their rendering mode.
Something like that:
[[UIImage imageNamed:#"wallet"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
Those methods are safe on iOS7, if you need to deploy on lower target is better that you check if they are available or your app will crash.

Tabbar item image doesn't appear

I have an issue with the images of tabbar items. I set an image on each tabbar item but when i run the app, the only image that appears is that of the first tabbar item. Images of others tabbar items don't appear until i select one of these tabs. The code that i use to set an image on a tabbar item is the following:
[self.tabBarItem setImage:[UIImage imageNamed:#"multi30x30.png"]];
[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:#"multi30x30.png"]
withFinishedUnselectedImage:[UIImage imageNamed:#"multi30x30.png"]];
Can someone help me?
You can try this:
[[[self.tabBarController.viewControllers objectAtIndex:0] tabBarItem]setFinishedSelectedImage:[UIImage imageNamed:#"LocateIconActive.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"LocateIconInactive.png"]];
[[[self.tabBarController.viewControllers objectAtIndex:1] tabBarItem]setFinishedSelectedImage:[UIImage imageNamed:#"ProductsIconActive.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"ProductsIconInactive.png"]];
[[[self.tabBarController.viewControllers objectAtIndex:2] tabBarItem]setFinishedSelectedImage:[UIImage imageNamed:#"NextDeliveryIconActive.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"NextDeliveryIconInactive.png"]];
[[tabBarController.tabBar.items objectAtIndex:0] setFinishedSelectedImage:[UIImage imageNamed:#"blabla1.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"bleble1.png"]];
[[tabBarController.tabBar.items objectAtIndex:1] setFinishedSelectedImage:[UIImage imageNamed:#"blabla2.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"bleble2.png"]];
[[tabBarController.tabBar.items objectAtIndex:2] setFinishedSelectedImage:[UIImage imageNamed:#"blabla3.png"] withFinishedUnselectedImage:[UIImage imageNamed:#"bleble3.png"]];
use this code :--
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions
{
UITabBarController *tabBarController
= (UITabBarController
*)self.window.rootViewController;
UIImage *selectedImage0 = [UIImage
imageNamed:#"tb_inorganic_selected"];
UIImage *unselectedImage0 = [UIImage imageNamed:#"tb_inorganic_normal"];
UIImage *selectedImage1 = [UIImage imageNamed:#"tb_organic_selected"];
UIImage *unselectedImage1 = [UIImage imageNamed:#"tb_organic_normal"];
UIImage *selectedImage2 = [UIImage imageNamed:#"tb_acid_selected"];
UIImage *unselectedImage2 = [UIImage imageNamed:#"tb_acid_normal"];
UITabBar *tabBar = tabBarController.tabBar;
UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
UITabBarItem *item2 = [tabBar.items objectAtIndex:2];
[item0 setFinishedSelectedImage:selectedImage0 withFinishedUnselectedImage:unselectedImage0];
[item1 setFinishedSelectedImage:selectedImage1 withFinishedUnselectedImage:unselectedImage1];
[item2 setFinishedSelectedImage:selectedImage2 withFinishedUnselectedImage:unselectedImage2];
Creates and returns a new item with the specified title, unselected image, and selected image.
If no selectedImage is provided, image is used as both the unselected and selected image.
By default, the actual unselected and selected images are automatically created from the alpha values in the source images. To prevent system coloring, provide images with UIImageRenderingModeAlwaysOriginal. Availability iOS 7 and later.
UIImage *aImage = [UIImage imageNamed:#"a"];
aImage = [aImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *inaImage = [UIImage imageNamed:#"ina"];
inaImage = [inaImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.aController.tabBarItem = [[UITabBarItem alloc]initWithTitle:#"title" image:inaImage selectedImage:aImage];
I would prefer that the ViewController do this. So, in my opinion, the best solution should be override init method and set the TabBarItem here.
Probably you are doing it in viewDidLoad and so only the first item appear.
Sorry for the spelling mistakes.
SWIFT 5.4
tabBarController?.viewControllers?[index].tabBarItem.image = UIImage(named: "imageName")

iOS Custom Tab Bar Items Taller Than Tab Bar

Ok, so, I'm trying to create a custom tab bar. I've read a hundred tutorials and downloaded half as many sample code projects and this problem seems to still be in all of them.
I don't really want a custom background, what I really want to for the buttons to take up the entire area so that no background ever shows. Why is it that when using an image sized at 49px (98px for Retina) for the background AND the buttons...the tab bar itself is scaled up and that ugly glow that Apple adds is viewable?
Here's the code I used (found here on Stack):
UIImage *selectedImage0 = [UIImage imageNamed:#"transactions_tab_btn_active"];
UIImage *unselectedImage0 = [UIImage imageNamed:#"transactions_tab_btn"];
UIImage *selectedImage1 = [UIImage imageNamed:#"bills_tab_btn_active"];
UIImage *unselectedImage1 = [UIImage imageNamed:#"bills_tab_btn"];
UIImage *selectedImage2 = [UIImage imageNamed:#"messages_tab_btn_active"];
UIImage *unselectedImage2 = [UIImage imageNamed:#"messages_tab_btn"];
UIImage *selectedImage3 = [UIImage imageNamed:#"reports_tab_btn_active"];
UIImage *unselectedImage3 = [UIImage imageNamed:#"reports_tab_btn"];
UITabBar *tabBar = self.tabBarController.tabBar;
UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
UITabBarItem *item2 = [tabBar.items objectAtIndex:2];
UITabBarItem *item3 = [tabBar.items objectAtIndex:3];
UIImageView *tabBarImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:#"tab_bar"]];
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 5) {
[tabBar insertSubview:tabBarImageView atIndex:0];
}else{
[tabBar insertSubview:tabBarImageView atIndex:1];
}
[item0 setFinishedSelectedImage:selectedImage0 withFinishedUnselectedImage:unselectedImage0];
[item1 setFinishedSelectedImage:selectedImage1 withFinishedUnselectedImage:unselectedImage1];
[item2 setFinishedSelectedImage:selectedImage2 withFinishedUnselectedImage:unselectedImage2];
[item3 setFinishedSelectedImage:selectedImage3 withFinishedUnselectedImage:unselectedImage3];
Again, I can remove that background image as it's of no use to me, but without it, the default black background for the tab bar is viewable. Both bad. Help.Please.
Well, I can help you with the glow. To hide it just create a transparent image and use it instead.
UIImage* image = [UIImage imageNamed:#"transparent.png"];
[[UITabBar appearance] setSelectionIndicatorImage:image];

Resources