2010-01-02 4 views
1

편집에 탭보기를 호출하는 나에게 질문을 단순화하자, 응용 프로그램이 이보기가 홈보기 3 개 탭이있는 탭 보기를 가정하자. 홈 뷰에는 "Tab1", "Tab2"및 "Tab3"이라는 표준 버튼 세 개가 개 있습니다. "Tab1"을 클릭하면 탭보기는 탭 1이 선택된 상태에서 열리는 이어야하며은 Tab2 및 Tab3과 동일합니다.가장 좋은 방법은 아이폰

힌트가 있습니까?
/편집 내가 할 노력하고있어

: 내 아이폰의 애플 리케이션이 초기화 될 때, 그것은 하나 개의 버튼으로보기를 표시합니다. 이 버튼을 클릭하면 탭보기로 이동해야합니다.

내가하고있는 방식과 작동하지 않는 방식 (예기치 않은 예외가 발생 함) : 뷰 기반 템플릿에서 프로젝트를 생성하여 시작했습니다. 자동 생성 된보기 컨트롤러에서 TabbedViewController라는 다른보기 컨트롤러를 선언했습니다.

#import <UIKit/UIKit.h> 

@class TabbedViewController; 

@interface DZBluePagesViewController : UIViewController { 
    TabbedViewController *tabbedViewController; 
} 

@property (nonatomic, retain) TabbedViewController *tabbedViewController; 

-(IBAction)goToTabbedView:(id)sender; 

@end 

내가 생성 한 XIB가 TabbedView라고하고 TabbedViewController에 파일 소유자의 클래스 ID를 설정 : 여기에 헤더 파일입니다. 또한 Tab Bar Controller를 드래그했습니다.

- (void)viewDidLoad { 

    TabbedViewController *tvc = [[TabbedViewController alloc] 
           initWithNibName:@"TabbedView" bundle:nil]; 
    self.tabbedViewController = tvc; 
    [tvc release]; 

    [super viewDidLoad]; 
} 



-(IBAction)goToTabbedView:(id)sender { 
// [self.view removeFromSuperview]; 
    [self.view insertSubview:tabbedViewController.view atIndex:0]; 
} 

나는 insertSubview 호출에 캐치되지 않는 예외를 받고 있어요 :

내가 여기에 홈 뷰 버튼을 추가했습니다 내가 기본보기 컨트롤러 파일과 연관된 한 행동입니다 ... 지금까지 멀티 뷰 앱에 대한 3 ~ 4 가지 자습서 (iPhone Development - Mark 및 LaMarche - book)를 작성 했으므로 내 손을 잡는 사람이 없어도 할 수 있다고 생각했습니다. 분명히 잘못되었습니다. 아무도 도울 수 있니?

+0

문제는 TabbedViewController에있다, 당신은 오류에 대한 자세한 정보를 제공 할 수 있습니까? 점점? – bentford

+0

다음은 디버거 콘솔의 붙여 넣기입니다. 2010-01-02 11 : 02 : 00.869 DZBluePages [5604 : 207] *** 캐치되지 않은 예외 'NSInternalInconsistencyException'으로 인해 앱 종료 중, 이유 : ' 탭 막대 컨트롤러는 허용되지 않습니다. ' 2010-11-02 11 : 02 : 00.871 DZBluePages [5604 : 207] 스택 : ( 29262939, 2525458249, ... –

답변

1

이 단순화 된 질문

에 대답하기 위해 나는 당신이 홈 뷰 다음 탭 바보기 모두의 수퍼로 세 번째 "루트"뷰와 뷰 컨트롤러를 필요가 있다고 생각합니다.

앱이 시작되면 루트보기가 홈보기의 콘텐츠를로드합니다. 당신이 선 루트 뷰 컨트롤러 내에서 수행 할 수 있습니다 :

homeViewController.view.frame = self.view.bounds; 
[self.view addSubview:homeViewController.view]; 

을 그런 다음 탭 표시 줄보기로 전환 할 때, 당신은이 작업을 수행 할 것입니다 :

[homeViewController.view removeFromSuperview]; 
tabBarViewController.view.frame = self.view.bounds; 
[self.view addSubview:tabBarViewController.view]; 

이는 캐치 다음 viewWillAppear :, viewDidAppear : 직접 호출하지 않으면 메서드가 호출되지 않으므로 올바른 위치에 메서드를 삽입해야합니다.

Ben Gottlieb이 제안한 것처럼 쉽게 할 수 있으며 UINavigationController를 루트보기로 사용합니다. (루트를 의미하는 것으로 사용하고 있는데, 네비게이션 컨트롤러의 루트 뷰는 홈 뷰입니다.) 위의 코드 대신, pushViewController : 메서드를 호출하여 tabBarViewController를 밀어 넣을 수 있습니다. If UINavigationController를 사용자 정의하여 탐색 바를 숨기고 싶을 것입니다. 아마 원하지 않을 것이고, Apple은 실제로 탐색보기 계층 내에 탭 막대를 놓는 것을 권장하지 않습니다. 예외

당신이 게시를 제외하고 아무 상관이하지 않는 것 게시 코드에 관한

. See this blog post for instructions on setting a global breakpoint on thrown exceptions. 그렇게하면 디버거를 사용하여 자신의 프로그램에서 문제가되는 코드 줄을 파악할 수 있습니다.

+0

감사! 나는 이것을 시도 할 것이지만, 먼저 링크에서 힌트를 사용하여 예외에 대한 더 많은 정보를 수집하고자한다. –

0

예외가 발생하면 실행 콘솔 (shift-command-R)을 엽니 다. 그걸 게시해라. 콘솔을 열고 프롬프트에서 "back trace"에 "bt"를 입력 할 수도 있습니다.

예외를 게시하십시오.

+0

인터페이스 작성기로 이동하여 Tabview를 삭제 한 다음 새 탭을 추가하십시오. – justin

0

나는 UINavigationController를 사용하고 단추를 선택하면 tabController를 밀어 넣는 것이 좋습니다. 슬라이드 애니메이션을 원하지 않으면 animated : 인수에 대해 NO를 전달하십시오.

0

왜 중복 메뉴보기가 있습니까? 탭보기를보기만으로 선택하지 않고 사용자가 선택할 탭을 선택하게하는 것이 어떻습니까? 나는 왜 당신이 메뉴를 필요로하지 않는 특정 탭을 열 때 탭 바 인터페이스가 어쨌든 메뉴없이 그 일을 할 때 ...

+0

홈 뷰는 추가 기능을 가지고 있으므로 여기서는 언급하지 않았다. –