2013-06-06 1 views
0

처음에는 탭 하나가있는 탭 막대 프로젝트가 있고보기 컨트롤러에는 단추가 있습니다. 버튼을 탭하면 특정보기 컨트롤러가 tabbar 컨트롤러/탭 항목에 추가 될 것으로 예상됩니다. 그러나 버튼을 누를 때마다 동일한 뷰 컨트롤러/탭 항목이 추가됩니다 (동일한 탭 항목이 여러 개 있음). 버튼을 두 번 누르는 횟수에 관계없이 하나의 ViewController에 대해 하나의 탭 항목을 제한하려고합니다. 어떤 도움을 주시면 감사하겠습니다.런타임에 추가하기 전에 TabBar 항목이 이미 있는지 확인하는 방법은 무엇입니까?

-(IBAction) buttontap:id(sender){ 
UITableViewController*TableView = [mainStoryBoard instantiateViewControllerWithIdentifier:@"Table A"]; 
     TableView.title = @"Table A"; 

NSMutableArray *TabBarItems = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers]; 


if ([self.tabBarController.tabBarItem.title.description isEqualToString:@"Table A"]) 
    { 
    [TabBarItems addObject:nil]; 

    } 
else 
    { 
    [TabBarItems addObject:TableView]; 
    TableView.tabBarItem.image = [UIImage imageNamed:@"contents.png"]; 

} 
    [self.tabBarController setViewControllers:TabBarItems]; 

} 

답변

0

그렇게처럼 헤더 파일에있는 TableView를 선언 할 수 :

if(!TableView){ 
    //your code here 
    //instantiate TableView ad add it to the TabBar. 

} 

그런 식으로, 그것은 단지 실행됩니다 다음의 ViewController이 이미 존재하는 경우

UITableViewController *TableView; 

지금 당신이 확인할 수 있습니다 첫 번째 단추를 누릅니다.

편집 :

은 물론이 고원은 당신이 가지고있는 모든 버튼에 대한의 ViewController를 선언 할 필요합니다. 보다 역동적 인 접근 방식은 -(BOOL)isEqual:를 사용하여 새로 만든의 ViewController에 각 항목을 생성하는 가변 배열을 사용하고 비교하는 것입니다 :

UITableViewController*TableView = [mainStoryBoard instantiateViewControllerWithIdentifier:@"Table A"]; 
NSMutableArray *TabBarItems = [NSMutableArray arrayWithArray:self.tabBarController.viewControllers]; 
BOOL found = NO; 
for (UIViewController *vc in TabBarItems){ 
    if([vc isEqual:TableView]){ 
     found=YES; 
    } 
} 
if(!found){ 
    [TabBarItems addObject:TableView]; 
    TableView.tabBarItem.image = [UIImage imageNamed:@"contents.png"]; 
    [self.tabBarController setViewControllers:TabBarItems]; 

} 

지금 당신은 당신의 헤더에 더 많은 변수를 추가하지 않고 더 많은 버튼을 추가 할 수 있습니다. 재미있게 보내십시오.

+0

감사합니다. 잘 했어. – Sivon