2010-05-26 3 views
6

내 응용 프로그램에서 탭을 전혀 선택하지 않으려 고합니다. 처음에는 첫 번째 탭이 선택되었지만 선택을 취소하고 탭을 전혀 선택하지 않으려합니다.UITabBar에서 탭을 선택하지 마십시오

이유를 묻지 마십시오. 클라이언트가 원하는 방식입니다. hehe

도움 주셔서 감사합니다.

PS : 나는 이미 시도 :

// rootController = UITabBarController  
rootController.tabBar.selectedItem = 0; 
rootController.tabBar.selectedItem = nil; 
[rootController setSelectedIndex:[rootController.items objectAtIndex:0]]; 
[rootController setSelectedIndex:nil]; 
[rootController setSelectedIndex:0]; 
// That one works : (but I can't select 0 or -1 for instance) 
[rootController setSelectedIndex:2]; 

어떤 아이디어? 다시 한 번 감사드립니다! documentation에서

+0

이 문제점의 해결책을 찾았습니까? 또한이 문제에 대한 해결책을 찾고 있습니다. 해결책을 찾았 으면 알려주세요. –

답변

0

:

이보기 컨트롤러는 누구의 사용자 정의보기 현재 탭 표시 줄 인터페이스에 의해 표시되는 것입니다. 지정된 뷰 컨트롤러는 viewControllers 배열에 있어야합니다. 이 속성에 새보기 컨트롤러를 할당하면 현재 표시된보기가 변경되고 탭 막대에서 적절한 탭이 선택됩니다. 뷰 컨트롤러를 변경하면 그에 따라 selectedIndex 속성도 업데이트됩니다. 이 속성의 기본값은 nil입니다.

그래서 저는 [rootController setSelectedViewController: nil];이 필요합니다.

업데이트 :

조금 명확히하기 위해, 도움이 될 수 preventing the selection of tabs에 대한 문서도 있습니다

[self.tabBarController setSelectedViewController:nil];

.

+0

내 질문의 코드 비트에서 말한 것처럼 : 작동하지 않습니다.이 이유 때문에 충돌합니다. 2010-05-26 12 : 35 : 22.091 PremierSoins [8449 : 207] *** - [UITabBarController selectedViewController :] : 인식 할 수없는 선택기를 인스턴스 0x4b43fb0에 보냄 2010-05-26 12 : 35 : 22.093 PremierSoins [8449 : 207] *** 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 응용 프로그램 종료 중, 이유 : '*** - [UITabBarController selectedViewController :] : 인식 할 수 없습니다. 선택기가 인스턴스 0x4b43fb0 '로 전송 됨 – TomShreds

+0

문제의 코드에'selectedViewController : '에 대한 언급이 없습니다. 'setSelectedIndex :'는 같은 것이 아닙니다. –

+0

'-selectedViewController :'뿐만 아니라'-setSelectedViewController :'를 호출해야합니다 ... –

7

UITabBarController가없는 UITabBar 인스턴스를 사용하는 경우 모든 탭 표시 줄 항목의 선택을 취소 할 수 있습니다.

이러한 경우 아래 코드가 잘 작동합니다. 의 UITabBar 예외로 충돌합니다 UITabBarController가 다음 응용 프로그램의 일부인 경우

[tabBar setSelectedItem:nil]; 

:

'직접 탭 표시 줄 탭 표시 줄 컨트롤러 관리 수정은 허용 하지.'

즉,이 기능을 사용하려면 컨트롤러없이 수동으로 탭바의 루틴을 관리해야합니다.

+0

와우 이것은 진짜 속임수입니다 – code4j

1

드디어이 다음 코드를 사용하여이 작업을 수행하기 위해 관리 : 그냥 아무것도하지 않습니다 [self.tabBarController setSelectedViewController:nil];을하고

 DefaultView *defaultView = [[DefaultView alloc]initWithNibName:@"DefaultView" bundle:[NSBundle mainBundle]]; 
     [self.tabBarController setSelectedViewController:nil]; 
     [self.tabBarController setSelectedViewController:defaultView]; 

참고. 이 있으시면보기 컨트롤러를 지정하십시오. 이 뷰 컨트롤러는 tabBar 아이콘이 선택되지 않은 상태로 표시됩니다. 다른 TabBar 옵션을 선택하면 defaultView가 사라지고 필요한보기가로드됩니다.

+2

이것은 작동하는데 사용되었지만 iOS 5.0부터 깨졌습니다. 세 번째 코드 줄에서 다음과 같은 오류 메시지가 나타납니다. '탭 컨트롤러의보기 컨트롤러 목록에있는보기 컨트롤러 만 선택할 수 있습니다.' – scalbatty

+1

나를 위해 작동하지 않습니다. –

2

난 그냥이 질문을 가로 질러 와서 실제로 정말 간단합니다

tabBarController.selectedViewController = viewController; 

이 HG의 대답에 다소 비슷하지만, 전무 선택한 뷰 컨트롤러를 설정하는 것이 필요하다.

0

더 좋은 방법이 있습니까?

use [self.tabBarController setSelectedViewController:nil], 
Warning : "-[UITabBarController setSelectedViewController:] only a view controller in the tab bar controller's list of view controllers can be selected." 
0

나는 rootController.tabBar.selectedItem = 0;

당신이 시도 어떤 잘못된 생각합니다. selectedItem=0을 설정하면 첫 번째 tabBarItem이 tabBarController이 될 것입니다.

1

언제든지 원하는 이미지를 변경하는 것이 좋습니다. &보기를 숨기거나 표시하여 요구 사항에 맞게 표시하십시오. 여기 내 이해할 수있는 코드 조각 :

-(void)viewWillAppear:(BOOL)animated{ 
    if ([[NSUserDefaults standardUserDefaults]integerForKey:@"flagAsk"]) { 
     UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0]; 
     firstTab.selectedImage = [[UIImage imageNamed:@"Ask2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; 
       vieToHide.hidden=YES; 
    } 
    else{ 
     UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0]; 
     firstTab.selectedImage = [[UIImage imageNamed:@"Ask"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; 
     vieToHide.hidden=NO; 
    } 
} 
관련 문제