2014-05-09 2 views
0

런타임시 탭 표시 줄의 탭 표시 줄 항목을 프로그래밍 방식으로 변경하고 있습니다. 내 앱의 UI 전체가 스토리 보드를 사용하며 코드에서 UI 변경을 수행하는 유일한 영역입니다.UITabBarController에 프로그래밍 방식으로 추가 된 UIView는 검정색으로 표시됩니다.

따라서 UI는 속성에 따라 변경됩니다. 이 속성을 찾을 수 없으면 viewControllers 배열이 새 UIView가 포함 된 새 배열로 변경됩니다.

다음은 TabBarController.m에 대한 내 코드입니다 :

NSArray *arrayOfControllers = self.viewControllers; 
NSMutableArray *newArrayOfControllers = [[NSMutableArray alloc]init]; 

for (id controller in arrayOfControllers) 
{ 
    [newArrayOfControllers addObject:controller]; 
} 


if (!isMember) 
{ 
    NotMemberVC *vc = [[NotMemberVC alloc]init]; 
    vc.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Test" image:[UIImage imageNamed:@"door-sign.png"] tag:0]; 

    [newArrayOfControllers removeLastObject]; 
    [newArrayOfControllers addObject:vc]; 

    self.viewControllers = newArrayOfControllers; 
} 

그리고 여기 내가이 새로운 탭 표시 줄의 항목을 선택했을 때의 모습입니다 : 나는이 문제를 해결할 수있는 방법에 대한 enter image description here

어떤 제안 ?

당신이 배열의 mutableCopy 할 수있는 방법이있을 때 사이클에 대한 작업을 수행 할 필요가 없습니다 모든
+0

을 ? – rdelmar

+0

뷰가 하나의 스토리 보드에 생성되었습니다 – TooManyEduardos

+0

그런 다음 init을 할당하지 않고 UIStoryboard 메소드 instantiateViewControllerWithIdentifier :를 사용하여 컨트롤러를 만들어야합니다. – rdelmar

답변

0

첫째 : 여기에

NSArray *arrayOfControllers = self.viewControllers; 
NSMutableArray *newArrayOfControllers = [arrayOfControllers mutableCopy]; 

, 당신이 볼 수있는의 ViewController를 initializating되지 않았습니다를. 이 경우 에서는 스토리 보드에있는 UIView와 VC가 있고, 그래서 당신은 스토리 보드에 VC에 StoryboardID을 선택해야하고, : 당신이 NotMemberVC에 대한 뷰를 만들려면 어떻게해야합니까

if (!isMember) 
{ 
    NotMemberVC *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Your_Identifier_ViewController_Storyboard"]; 

    vc.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Test" image:[UIImage imageNamed:@"door-sign.png"] tag:0]; 

    [newArrayOfControllers removeLastObject]; 
    [newArrayOfControllers addObject:vc]; 

    //Here make a copy to come back to immutable array 
    self.viewControllers = [newArrayOfControllers copy]; 
} 
+0

마테오 감사합니다. 맥주를 마셔도 좋습니다! – TooManyEduardos

+0

당신은 환영합니다,하지만 이것을이 커뮤니티에서 가장 중요한 정답으로 설정하는 것을 잊지 마십시오. –

+0

나는 약간의 이상한 이유 때문에 3 분을 기다렸다. – TooManyEduardos

관련 문제