2010년 4월 4일 일요일

[iPhone] UITabbarcontroller의 UITabbarItem 선택된 색상 바꾸기

기본적으로 제공하는 UITabbarcontroller에서 하단 탭바의 선택 색깔은 Blue 이다.

Blue 색을 바꾸기 위해서...는 다음과 같이 하면 된다.

// 각 탭바에 선택 되기전 이미지(menuOne), 선택되었을 때 이미지(menuOne_select)를 만들고,
// 각 이미지를 넣어주면 된다.
// 이미지를 수정 없이 넣으면 이미지가 상단으로 올라가므로 tabBarSelectedImageLocationMove
// 메소드를 통해서 수정 9.0f 정도 밑으로 내려주면~ 끝 ㅎ

UIImage *menuOne = [UIImage imageNamed:@"images/common/menu1.png"];

UIImage *menuOne_select = [UIImage imageNamed:@"images/common/menu1_on.png"];

[basicSubNavController.tabBarItem setTitle:@"아웃~ㅎ"];

[basicSubNavController.tabBarItem setImage:[self tabBarSelectedImageLocationMove:menuOne]];

[basicSubNavController.tabBarItem setSelectedImage:[self tabBarSelectedImageLocationMove:menuOne_select]];

[basicSubNavController.tabBarItem setTag:0];


// 이미지가 상단으로 이동 되므로 아래로 내려 주는 메소드

- (UIImage *)tabBarSelectedImageLocationMove:(UIImage *)_image

{

UIImage *itemImage;

CGSize itemImageSize = [_image size];

UIGraphicsBeginImageContext(itemImageSize);

CGContextSetInterpolationQuality(UIGraphicsGetCurrentContext(), kCGInterpolationHigh);

[_image drawInRect:CGRectMake(0.0f, 9.0f,

itemImageSize.width, itemImageSize.height)];

itemImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return itemImage;

}


==== 추가 사항 ====

원래 TabbarItem에는 setSelectedImage 라는 메소드는 없다.

그럼 어떻게??


UIBarExtend.h & UIBarExtend.m 파일을 만든다. (NSObject)


UIBarExtend.h

@interface UITabBar (ColorExtensions)

- (void)fixTabBarBackground;

@end


@interface UITabBarItem (Private)

@property(retain, nonatomic) UIImage *selectedImage;


@end

UIBarExtend.m

#import "UITabbar_Extension.h"


@implementation UITabBar (ColorExtensions)


// 이건.. 탭바 배경 바꾸는 소스 ㅎㅎㅎ

- (void)fixTabBarBackground

{

UIImage *img = [UIImage imageNamed:@"bg_foot.png"];

UIImageView *imgView = [[UIImageView alloc] initWithImage:img];

[self addSubview:imgView];

[imgView release];

}

@end



진작 이렇게 할껄...ㅎ

괜히

http://stackoverflow.com/questions/2506290/how-to-change-uitabbar-selected-color

이거 보고 따라했다가.. 리젝 먹었음;;;

댓글 1개:

  1. 덕분에 많은 참고 됐습니다. 첨에 loadView 에 넣었었는데 안되길래.. 안되나 했는데..

    init 으로 옮겨 넣으니 되네요..

    고맙습니다. ^^;;

    답글삭제