2012-01-20 4 views
1

탭 막대 컨트롤러 (탭 막대 기반 응용 프로그램이므로 탭 막대는 MainWindow.xib에 있습니다). 이 xib에서는 4 개의 탭 표시 줄 항목을 추가했으며 모든 탭 표시 줄 항목의 이미지를 설정했습니다. 이 때문에, 나는이 문제에 직면하고있다 : 이미지가-화이트 컬러입니다tabbar item image 및 selectedImage

1),하지만 응용 프로그램을 실행할 때, 그 회색 색깔로 탭 표시 줄의 항목에있는 모든 이미지를 보여주는. 원본 이미지에서와 똑같이 보이게하려면 어떻게해야합니까?

2) 나는 현재 선택된 탭 표시 줄의 항목을 추가 할 것인지, 선택한 이미지를 가지고있다. 어떻게해야합니까 ???

닉의 코드 뒤에 업데이트 :

이봐,에서 iOS 5에서, 당신은 탭 표시 줄의 항목이 선택하고 선택되지 않은 이미지 (카테고리 솔루션은 4에서 작동) 설정을위한 앱 위임에 다음 코드를 작성해야합니다 :

if ([[[UIDevice currentDevice] systemVersion] floatValue]>4.9) { 
    NSString *selectedImageName,*unselectedImageName; 

    for (int counter = 0; counter < [self.tabBarController.tabBar.items count]; counter++) { 
     if (counter==0) { 
      selectedImageName = <someImagename>; 
      unselectedImageName = <someImagename>; 
     } 
     else if (counter==1) { 
      selectedImageName = <someImagename>; 
      unselectedImageName = <someImagename>; 
     } 
     . 
        . 
     else { 
      selectedImageName = <someImagename>; 
      unselectedImageName = <someImagename>; 
     } 
     UIImage *selectedImage = [UIImage imageNamed:selectedImageName]; 
     UIImage *unselectedImage = [UIImage imageNamed:unselectedImageName]; 

     UITabBarItem *item = [self.tabBarController.tabBar.items objectAtIndex:counter]; 
     if ([item respondsToSelector:@selector(setFinishedSelectedImage:withFinishedUnselectedImage:)]) { 
      [item setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; 
     } 
    } 
} 
+0

- 범주 UItabBarItem (CustomUnselectedImage)를 추가 - = (

* .H

@interface CustomTabBarItem : UITabBarItem { UIImage *customHighlightedImage; UIImage *customNormalImage; } @property (nonatomic, retain) UIImage *customHighlightedImage; @property (nonatomic, retain) UIImage *customNormalImage; - (id)initWithTitle:(NSString *)title normalImage:(UIImage *)normalImage highlightedImage:(UIImage *)highlightedImage tag:(NSInteger)tag; @end 

와 *하는 .m

#import "CustomTabBarItem.h" @implementation CustomTabBarItem @synthesize customHighlightedImage; @synthesize customNormalImage; - (id)initWithTitle:(NSString *)title normalImage:(UIImage *)normalImage highlightedImage:(UIImage *)highlightedImage tag:(NSInteger)tag{ [self initWithTitle:title image:nil tag:tag]; [self setCustomNormalImage:normalImage]; [self setCustomHighlightedImage:highlightedImage]; return self; } - (void) dealloc { [customHighlightedImage release]; customHighlightedImage=nil; [customNormalImage release]; customNormalImage=nil; [super dealloc]; } -(UIImage *) selectedImage { return self.customHighlightedImage; } -(UIImage *) unselectedImage { return self.customNormalImage; } @end 

행복 코딩 =]에 영향을주지 않은 이 튜토리얼을 통해 한 번 - http://sugartin.info/2011/07/01/customizing-tab-bar/ - 샘플 코드를 포함하여 필요한 모든 것을 설명했습니다. 건배 & 행운의 비결. –

+0

실제로 카테고리는 iOS5에서도 작동하지만 시뮬레이터에서는 작동하지 않습니다. –

답변

6

이 범주를 프로젝트에 추가하십시오. 비공개 API를 사용하는 것처럼

@implementation UItabBarItem (CustomUnselectedImage) 

- (UIImage *)unselectedImage 
{ 
    return self.image; 
} 

@end 

이 보일지도 모르지만, 나는이 여러 번 사용 봤어요 : 그것은 그들에게 회색 그라데이션을 적용하는 대신 비활성화 된 상태로 원본 이미지를 사용하여 탭 표시 줄의 항목을 강제로 승인 된 앱 실제로는 이 아니며을 호출하여 개인 메서드를 재정의합니다. 인터페이스 빌더에서 다음

@implementation UItabBarItem (Custom) 

- (UIImage *)selectedImage 
{ 
    switch (self.tag) 
    { 
     case 1: 
      return [UIImage imageNamed:@"tab-selected1.png"]; 
     case 2: 
      return [UIImage imageNamed:@"tab-selected2.png"]; 
     etc... 
    } 
} 

- (UIImage *)unselectedImage 
{ 
    switch (self.tag) 
    { 
     case 1: 
      return [UIImage imageNamed:@"tab-unselected1.png"]; 
     case 2: 
      return [UIImage imageNamed:@"tab-unselected2.png"]; 
     etc... 
    } 
} 

@end 

:

당신이 선택하고 선택되지 않은 이미지에 대한 다른 이미지를 지정해야하는 경우

, 당신의 가장 좋은 방법은이 같은 UITabBarItem의 태그 속성과 switch 문을 사용하는 아마 탭 바 항목 이미지를 무시하는 것만 큼 성가 시게하지 마십시오. 대신 스위치 문에 지정한 이미지와 일치하도록 태그를 설정하십시오.

앱에 탭 표시 줄이 여러 개 있고 이러한 방식으로 모든 탭 표시 줄을 재정의하지 않으려는 경우 카테고리가 아닌 UITabBarItem의 하위 클래스에서이 메서드를 정의 할 수 있습니다. 그런 다음 nib 파일의 탭 막대 항목 클래스를 일반 UITabBarItems가 아닌 사용자 정의 하위 클래스로 설정하면 해당 항목 만 영향을받습니다.

편집 :에서 iOS 5의로 UIAppearance API를 사용하여이 일을 더 나은 방법이 있다는 것을

참고. 이 기술은 여전히 ​​효과가 있지만, 공식적으로 지원되는 접근법이 있기 때문에 애플이이 기술을 단정 지을지 누가 ​​알 수있을 것이다. iOS 4 지원이 정말로 필요하지 않다면 새로운 방법을 사용하는 것이 좋습니다.

+0

안녕하세요 닉, 한 가지 의심 ... 어디에서이 코드를 호출할까요? – anshul

+0

Thanx Nick .. 내 didSelectViewController 델바드 컨트롤러의 대리자 메서드에서 이것을 시도해 보았습니다. Thanx Man [self.tabBarController.tabBarItem] setImage : [self.tabBarController.tabBarItem unselectedImage]] ' 하나 더 질문 : 시뮬레이터 4.3에서만 5.0을 테스트했기 때문에 iOS 5에서 작동합니까 ??? – anshul

+0

아니요, 당신은 오해했습니다. 이 코드를 호출하지 말고 그냥 .m 파일에 저장하면됩니다. 자동으로 호출합니다. Xcode에서 UITabBarItem에 새 카테고리를 만들고 CustomUnselectedImage라고합니다. 그리고 예, iOS 5에서 작동해야하지만 시뮬레이터에서는 작동하지 않을 수 있습니다. –

관련 문제