2012-04-27 239 views
4

我刚开始使用iOS开发,我只是在玩atm。iOS自定义标签栏

我想将默认的tabbar按钮转换为更自定义的东西。

后一些环顾四周,我发现你可以为每个按钮创建自定义的状态,所以我所做的:

UIImage *selectedImage0 = [UIImage imageNamed:@"first.png"]; 
UIImage *unselectedImage0 = [UIImage imageNamed:@"second.png"]; 

UITabBar *tabBar = self.tabBarController.tabBar; 
UITabBarItem *item0 = [tabBar.items objectAtIndex:0]; 

[item0 setFinishedSelectedImage:selectedImage0 withFinishedUnselectedImage:unselectedImage0]; 

但是,我无法摆脱的默认按钮,它改变了形象,但它不会改变我的整个按钮。

有什么我需要做的吗?

UIViewController *viewController1 = [[FirstViewController alloc]  initWithNibName:@"FirstViewController" bundle:nil]; 
UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 

self.tabBarController = [[UITabBarController alloc] init];  
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; 
self.window.rootViewController = self.tabBarController; 
[self.window makeKeyAndVisible]; 

UIImage *selectedImage0 = [UIImage imageNamed:@"first.png"]; 
UIImage *unselectedImage0 = [UIImage imageNamed:@"second.png"]; 

UITabBar *tabBar = self.tabBarController.tabBar; 
UITabBarItem *item0 = [tabBar.items objectAtIndex:0]; 

[item0 setFinishedSelectedImage:selectedImage0 withFinishedUnselectedImage:unselectedImage0]; 
+0

http://stackoverflow.com/questions/4710298/how-can-i-create-custom-tab-bar-add-custom-images-in-tab-bar-without-xib-cha...Visit这个堆栈帖子.. – Nit 2012-04-27 05:59:04

+0

请参阅本教程和自定义选项卡栏的源代码。 [Custom tabbar](http://cocoacontrols.com/search?utf8=%E2%9C%93&q=tabbar) – 2012-04-27 06:13:06

+0

[This answer](http://stackoverflow.com/questions/41139914/how-to-make- multiple-color-tab-bar-in-swift-3/41140329#41140329)可能会有用。 – 2016-12-14 12:24:12

回答

4

在这里我创建了一个自定义标签栏,我拍摄的图像是在一个常量文件中。在这里,您可以根据您的方便将图像替换为“foo.png”。这里serivceImg,contactImg等是在.h文件中声明的UIImageView。另外,不要忘记在你的.h文件中添加UITabBarControllerDelegate作为代理。

-(void)setUpTabBar { 

tabBar = [[UITabBarController alloc] init]; 

Services *firstViewController = [[Services alloc]init]; 
firstViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:1]; 
UINavigationController *firstNavController = [[UINavigationController alloc]initWithRootViewController:firstViewController]; 

ContactUs *secondViewController = [[ContactUs alloc]init]; 
secondViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:2]; 
UINavigationController *secondNavController = [[UINavigationController alloc]initWithRootViewController:secondViewController]; 

Bookings *thirdViewController = [[Bookings alloc]init]; 
thirdViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:3]; 
UINavigationController *thirdNavController = [[UINavigationController alloc]initWithRootViewController:thirdViewController]; 

Reward *fourthViewController = [[Reward alloc]init]; 
fourthViewController.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemRecents tag:4]; 
UINavigationController *fourthNavController = [[UINavigationController alloc]initWithRootViewController:fourthViewController]; 

tabBar.viewControllers = [[NSArray alloc] initWithObjects:firstNavController, secondNavController, thirdNavController, fourthNavController, nil]; 
tabBar.delegate=self; 
tabBar.selectedIndex=0; 

[firstNavController release]; 
[firstViewController release]; 

[secondNavController release]; 
[secondViewController release]; 

[thirdNavController release]; 
[thirdViewController release]; 

[fourthNavController release]; 
[fourthViewController release]; 

serivceImg=[[UIImageView alloc]initWithFrame:CGRectMake(0, 432, 80, 49)]; 
serivceImg.image=[UIImage imageNamed:serviceHover]; 

contactImg=[[UIImageView alloc]initWithFrame:CGRectMake(81, 432,80, 49)]; 
contactImg.image=[UIImage imageNamed:tabContact]; 

bookingImg=[[UIImageView alloc]initWithFrame:CGRectMake(162, 432,80, 49)]; 
bookingImg.image=[UIImage imageNamed:tabBooking]; 

rewardImg=[[UIImageView alloc]initWithFrame:CGRectMake(243, 432, 80, 49)]; 
rewardImg.image=[UIImage imageNamed:tabReward]; 

[tabBar.view addSubview:serivceImg]; 
[tabBar.view addSubview:contactImg]; 
[tabBar.view addSubview:bookingImg]; 
[tabBar.view addSubview:rewardImg]; 

[[[UIApplication sharedApplication]keyWindow]addSubview:tabBar.view]; 

[serivceImg release]; 
[contactImg release]; 
[bookingImg release]; 
[rewardImg release]; 

} 

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController1{ 

    if (viewController1 == [tabBar.viewControllers objectAtIndex:0]) 

{ 

    serivceImg.image = [UIImage imageNamed:kserviceHover]; 
    contactImg.image=[UIImage imageNamed:ktabContact]; 
    bookingImg.image=[UIImage imageNamed:ktabBooking]; 
    rewardImg.image=[UIImage imageNamed:ktabReward]; 


} 

else if (viewController1 == [tabBar.viewControllers objectAtIndex:1]) 

{ 

    serivceImg.image = [UIImage imageNamed:ktabService]; 
    contactImg.image=[UIImage imageNamed:kcontactHover]; 
    bookingImg.image=[UIImage imageNamed:ktabBooking]; 
    rewardImg.image=[UIImage imageNamed:ktabReward]; 

} 

else if (viewController1 == [tabBar.viewControllers objectAtIndex:2]) 

{ 

    serivceImg.image = [UIImage imageNamed:ktabService]; 
    contactImg.image=[UIImage imageNamed:ktabContact]; 
    bookingImg.image=[UIImage imageNamed:kbookingHover]; 
    rewardImg.image=[UIImage imageNamed:ktabReward]; 

} 

else if (viewController1 == [tabBar.viewControllers objectAtIndex:3]) 

{ 

    serivceImg.image = [UIImage imageNamed:ktabService]; 
    contactImg.image=[UIImage imageNamed:ktabContact]; 
    bookingImg.image=[UIImage imageNamed:ktabBooking]; 
    rewardImg.image=[UIImage imageNamed:krewardHover]; 

} 

} 

试试这个。这可能对您有帮助。

+0

嗨...如何使这项工作在基于视图的应用程序。另外,在我看来,我想要一个导航栏和一个标签栏在顶部,另一个标签栏在底部。 – 2012-12-28 09:17:01