2010-11-26 2 views
1

내 앱이로드되면 마지막으로 앱을 실행했을 때 사용자가 설정 한 저장된 설정에 따라 탭 중 하나에서 이미지를 변경하고 싶습니다. 사용자가 탭의 viewcontroller의 ViewDidLoad 메서드를 실행하는 탭을 클릭하면 이미지를 변경할 수 있습니다. 아래 참조 :iPhone, UITabBarItem : 앱이 시작될 때 탭 막대의 이미지를 동적으로 변경합니다.

UITabBarItem *tabItem; 
if (condition = YES) { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter plus.png"] tag:self.view.tag]; 
} 
else { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter.png"] tag:self.view.tag]; 
} 
self.navigationController.tabBarItem = tabItem; 
[tabItem release]; 
[super viewDidLoad]; 

그러나 나는 그것이로드 할 때 응용 프로그램의 루트 뷰 컨트롤러에서 해당 탭의 UITabBarItem에 액세스하고 변경하는 방법을 알아낼 수 없었다. 아래의 루트보기 컨트롤러의 viewdidload 메소드를 참조하십시오.

UITabBarItem *tabItem; 
if (condition = YES) { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter plus.png"] tag:self.view.tag]; 
} 
else { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter.png"] tag:self.view.tag]; 
} 
// get the view controller of the tab I want to change 
MyViewController *vc = [self.tabBarController.viewControllers objectAtIndex:2]; 
ft.tabBarItem = tabItem; 
[tabItem release]; 
[super viewDidLoad]; 

이것이 작동하지 않을 때 나는 uitabbaritem에 액세스하고 변경하는 여러 가지 다른 방법을 시도했지만 아무 것도 효과가 없었습니다. UITabBarItem 및 UINavigationController 루트 뷰 컨트롤러에서 IBOutLets 만들기 시도했다.

// tb is an iboutlet to the UITabBarItem 
self.tb = tabItem; 

// nc is an iboutlet to the UINavigationController 
self.nc.tabBarItem = tabItem; 

. 어떤 생각을 어떻게 할 것인가?

답변

2

나는 그것을 알아 냈다. 방금 UITabBarItem의 setImage 메서드를 호출해야했습니다.

//UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
if (condition == YES) { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter plus.png"]]; 
    // [filterTab setImage:[UIImage imageNamed:@"filter plus.png"]];   
} 
else { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
    //[filterTab setImage:[UIImage imageNamed:@"filter.png"]]; 
} 

추가 질문 : 먼저 포인터에 tabbaritem을 지정한 다음 이미지를 설정하는 이유나 이점이 있습니까?

UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
[filterTab setImage:[UIImage imageNamed:@"filter plus.png"]]; 

대 한 코드 행에서 다음과 같이 하시겠습니까? 난 당신이 도움이되기를 바랍니다,이 하나를 시도 할 필요가 있다고 생각

[[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
+1

주요 장점은 코드를 읽기 쉽게 만든다는 것입니다. –

1

,

내가 좋아 선택한 tabbatitem 이미지 변경이 - TabBar의 컨트롤러 대리자 메서드에

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

{ 
    if([tabBarController selectedIndex] == 0) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 
    }  
} 

이를 통해 이미지를 바꿀 수 있습니다.

또는 당신은

 [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 

그것을 시도처럼,보기 컨트롤러 초기화 (또는 ViewWillAppear) 방법으로 직접 사용할 수 있습니다 !!!!