ios tabbar自定义图像

时间:2012-11-06 09:05:11

标签: objective-c ios

我在ios应用中工作我需要将tabbar定制为this

首先,我在导航控制器中创建了5个viewcontrollers 然后把它们放在tabbbarcontroller

我搜索了这个问题并找到了解决方案

[self.tabBarItem setFinishedSelectedImage:<#(UIImage *)#> withFinishedUnselectedImage:<#(UIImage *)#>]

但是适用于iOS 5,我需要iOS 4和iOS 5的解决方案。

3 个答案:

答案 0 :(得分:1)

对于ios4中的自定义标签栏不可用代码,您需要为我们自定义标签栏,您可以参考此Que。

How to Customize the tabbarcontroller

或者您也可以使用简单的逻辑来制作完整的标签栏图像,如enter image description here

这里我已经在appdel做了一个图像视图,并在应用程序中完成了这样的方法。

self.imgV.frame=CGRectMake(0, 431, 320, 49);
[self.tabbarcontroller.view addSubview:self.imgV];

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
    NSUInteger index=[[tabBarController viewControllers] indexOfObject:viewController];
    NSString *deviceType = [UIDevice currentDevice].model;
    NSLog(@"Device%@",deviceType);

    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad){
      //  self.imgV.frame=CGRectMake(0, 975, 768, 49);
        //[self.tabbarcontroller.view addSubview:self.imgV];

        switch (index) {
            case 0:
                self.imgV.image=[UIImage imageNamed:@"reservation_tab~iPad.png"];
                break;
            case 1:
                self.imgV.image=[UIImage imageNamed:@"place_order_tab~iPad.png"];
                break;
            case 2:
                self.imgV.image=[UIImage imageNamed:@"location_tab~iPad.png"];
                break;
            case 3:
                self.imgV.image=[UIImage imageNamed:@"favorite_tab~iPad.png"];
                break;
            case 4:

                self.imgV.image=[UIImage imageNamed:@"signature_dishes_tab~iPad.png"];

                break;
            case 5:
                self.imgV.image=[UIImage imageNamed:@"history_tab~iPad.png"];
                break;
            case 6:

                self.imgV.image=[UIImage imageNamed:@"contact_us_tab~iPad.png"];

                break;
            default:
                break;
        }

    }
    else{



    switch (index) {
        case 0:
            self.imgV.image=[UIImage imageNamed:@"reservation_tab.png"];
            break;
        case 1:
            self.imgV.image=[UIImage imageNamed:@"place_order_tab.png"];
            break;
        case 2:
            self.imgV.image=[UIImage imageNamed:@"location_tab.png"];
            break;
        case 3:
            self.imgV.image=[UIImage imageNamed:@"favorite_tab.png"];
            break;
        case 4:

                       self.imgV.image=[UIImage imageNamed:@"gallery_tab.png"];

            break;
        default:
            break;
    }
    }
    return YES;
}

答案 1 :(得分:0)

AppDelegate.m 文件中,添加以下代码。在那段代码中,我们创建了四个视图并将它们添加到Tab Controller中。这些视图目前是空的,因为我们在此项目中不需要任何内容​​。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UITabBarController *tabController = [[UITabBarController alloc] init];  


    UIViewController *viewController1 = [[UIViewController alloc] init];  


    UIViewController *viewController2 = [[UIViewController alloc] init];  


    UIViewController *viewController3 = [[UIViewController alloc] init];    


    UIViewController *viewController4 = [[UIViewController alloc] init];  

    tabController.viewControllers = [NSArray arrayWithObjects:viewController1, 

                                     viewController2, 

                                     viewController3, 

                                     viewController4, nil];

    self.window.rootViewController = tabController;  


    [self.window makeKeyAndVisible];

    return YES;

}

你可以看到一个很好的教程here

答案 2 :(得分:0)

试试这个 粘贴它.h文件

      #import <UIKit/UIKit.h>
    @class MapViewController,MenuViewController;
    @interface UITabBar (ColorExtensions)
    - (void)recolorItemsWithColor:(UIColor *)color shadowColor:(UIColor *)shadowColor shadowOffset:(CGSize)shadowOffset shadowBlur:(CGFloat)shadowBlur;
    @end

    @interface UITabBarItem (Private)
    @property(retain, nonatomic) UIImage *selectedImage;
    - (void)_updateView;
    @end

    @interface SegmentedControlExampleAppDelegate : NSObject <UIApplicationDelegate> {

        UIWindow * window;
        UINavigationController * navigationController;
        NSMutableArray *breads;
        NSMutableArray *categorys;
        NSMutableArray *collections;
        NSString *databaseName;
        NSString *databasePath;
        MapViewController *mapViewController;

        MenuViewController *wvTutorial;


    }

    @property (nonatomic, retain) IBOutlet UIWindow * window;
    @property (nonatomic, retain) UINavigationController * navigationController;
    @property (nonatomic,retain) NSMutableArray *breads;
    @property (nonatomic,retain) NSMutableArray *categorys;
    @property (nonatomic,retain) NSMutableArray *collections;
    @property (nonatomic, retain) UITabBarController *tabBarController;
    @property (nonatomic, retain) MenuViewController *wvTutorial;


    @end

In .m file

    #import "SegmentedControlExampleAppDelegate.h"
    #import "SegmentManagingViewController.h"
    #import "sqlite3.h"
    #import "AtoZHomePageViewController.h"
    #import "CategoryViewHomePage.h"
    #import "CollectionsListHomePageViewController.h"
    #import "AboutUs.h"
    #import "StoreLocatorViewController.h"
    #import "UINavigationBar+CustomImage.h"
    #import "MenuViewController.h"
    @implementation UITabBar (ColorExtensions)

    - (void)recolorItemsWithColor:(UIColor *)color shadowColor:(UIColor *)shadowColor shadowOffset:(CGSize)shadowOffset shadowBlur:(CGFloat)shadowBlur
    {
        CGColorRef cgColor = [color CGColor];
        CGColorRef cgShadowColor = [shadowColor CGColor];
        for (UITabBarItem *item in [self items])
            if ([item respondsToSelector:@selector(selectedImage)] &&
                [item respondsToSelector:@selector(setSelectedImage:)] &&
                [item respondsToSelector:@selector(_updateView)])
            {
                CGRect contextRect;
                contextRect.origin.x = 0.0f;
                contextRect.origin.y = 0.0f;
                contextRect.size = [[item selectedImage] size];
                // Retrieve source image and begin image context
                UIImage *itemImage = [item image];
                CGSize itemImageSize = [itemImage size];
                CGPoint itemImagePosition; 
                itemImagePosition.x = ceilf((contextRect.size.width - itemImageSize.width) / 2);
                itemImagePosition.y = ceilf((contextRect.size.height - itemImageSize.height) / 2);
                UIGraphicsBeginImageContext(contextRect.size);
                CGContextRef c = UIGraphicsGetCurrentContext();
                // Setup shadow
                CGContextSetShadowWithColor(c, shadowOffset, shadowBlur, cgShadowColor);

                // Setup transparency layer and clip to mask
                CGContextBeginTransparencyLayer(c, NULL);
                CGContextScaleCTM(c, 1.0, -1.0);
                CGContextClipToMask(c, CGRectMake(itemImagePosition.x, -itemImagePosition.y, itemImageSize.width, -itemImageSize.height), [itemImage CGImage]);

                           // Fill and end the transparency layer
                CGContextSetFillColorWithColor(c, cgColor);
                contextRect.size.height = -contextRect.size.height;
                CGContextFillRect(c, contextRect);
                CGContextEndTransparencyLayer(c);



                // Set selected image and end context
                [item setSelectedImage:UIGraphicsGetImageFromCurrentImageContext()];
                UIGraphicsEndImageContext();
                // Update the view
                [item _updateView];



            }

    }
    @end

    @implementation SegmentedControlExampleAppDelegate

    @synthesize window,tabBarController, navigationController,breads,categorys,collections,wvTutorial;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        databaseName = @"ProductsConnect_Master.sqlite";


        NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDir = [documentPaths objectAtIndex:0];
        databasePath = [documentsDir stringByAppendingPathComponent:databaseName];


        self.tabBarController = [[UITabBarController alloc] init];
        UIViewController *viewController = [[AboutUs alloc] initWithNibName:@"AboutUs" bundle:nil];
        UIViewController *viewController2 = [[StoreLocatorViewController alloc] initWithNibName:@"StoreLocatorViewController" bundle:nil];
        //UIViewController *viewController3 = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];

        self.wvTutorial = [[MenuViewController alloc]initWithNibName:@"MenuViewController" bundle:nil];




        SegmentManagingViewController * segmentManagingViewController = [[SegmentManagingViewController alloc] init];
        self.navigationController = [[UINavigationController alloc] initWithRootViewController:segmentManagingViewController];

        tabBarController.viewControllers = [NSArray arrayWithObjects:navigationController,viewController ,viewController2,wvTutorial , nil]; 



        [[UITabBar appearance] 
         setTintColor: [UIColor colorWithRed:120.0f/255.0f green:69.0f/255.0f blue:50.0f/255.0f alpha:1.0f]];
        [[UITabBar appearance] setSelectedImageTintColor:[UIColor colorWithRed:255.0f/255.0f green:252.0f/255.0f blue:235.0f/255.0f alpha:1.0f]];

        //[[UITabBar appearance] 

        // setBackgroundColor: [UIColor colorWithRed:255.0f/255.0f green:252.0f/255.0f blue:235.0f/255.0f alpha:0.8f]];


        navigationController.title = NSLocalizedString(@"HomePage", @"HomePage");
        navigationController.tabBarItem.image = [UIImage imageNamed:@"logoSmall"];

        [[UIApplication sharedApplication] setStatusBarHidden:YES];

        UIImage *navImage = [UIImage imageNamed:@"logoSmall.png"];
        // self.navigationItem.setImage: navImage;

        [[navigationController navigationBar] performSelectorInBackground:@selector(setBackgroundImage:) withObject:navImage];

        // UIImage *navImage = [UIImage imageNamed:@"logoSmall.png"];
        //[[navigationController navigationBar] performSelectorInBackground:@selector(setBackgroundImage:) withObject:navImage];




        [self.window addSubview:tabBarController.view];
        [segmentManagingViewController release];
        //[window addSubview:self.navigationController.view];
        [window makeKeyAndVisible];

        return YES;
    }

我使用此代码对我来说很好。