2011-11-08 4 views
0

이 주제에 대해 많은 것을 발견했지만 그 사실을 파악할 수 없습니다. 어떤 도움이라도 대단히 감사 할 것입니다!UIViewController 자동 회전이 작동하지 않음

앱이 UITabBarController로 설정되어 있습니다. 탭 중 하나에서, UINavigationController를 사용하여 계층을 허용하는 UITableView를 보여줍니다. 방향이 변경되면 모든 테이블이 잘 회전하여 계층 구조에서 최종 뷰가 실제로 유효하게됩니다.

최종보기는이 아닌 기본 UIView 인 입니다. 하지만이 페이지를 성공적으로 회전시킬 수는 없습니다. 나는 절대적인 기본이 요구되는 관점을 다시 만들었지 만 여전히 일하고 싶지 않습니다! 코드는 아래에 있지만 현재는 거의 표준 템플릿이 아닙니다.

또한 InterfaceBuilder를 사용하지 않고 shouldAutorotateToInterfaceOrientation이 모든보기에 있습니다. 이것은 내가 문제가있는 유일한 것입니다.

SomeView.h

#import <UIKit/UIKit.h> 
@interface SomeView : UIViewController 
{ 
    NSString *someID; 
    NSString *someName; 
} 
@property(nonatomic,retain) NSString *someID; 
@property(nonatomic,retain) NSString *someName; 
@end 

SomeView.m

#import "SomeView.h" 
#import "AppDelegate.h" 
@implementation SomeView 
@synthesize someID, someName; 

-(void)loadView 
{ 
} 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 

-(void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    return YES; 
} 

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration 
{ 
    NSLog(@"willAnimateRotationToInterfaceOrientation"); 
} 

-(void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

-(void)dealloc 
{ 
    [super dealloc]; 
} 
@end 

2011년 11월 10 UPDATE

난 아직도 그러나 문서와이 보인다 비트를 통해보고,이 문제가 있어요 내 문제 (http://developer.apple.com/library/ios/#qa/qa1688/_index.html)

뷰 컨트롤러의 UIView 속성은 UIWindow 내부에 포함되지만 추가 뷰 컨트롤러와 함께 포함됩니다.

shouldAutorotateToInterfaceOrientation은 주어진 뷰 컨트롤러의 시작시 한 번 호출되지만 장치 회전시 다시 호출되지는 않습니다. 뷰 컨트롤러는 관리하는 뷰에 밀접하게 연결되어 있기 때문에 이벤트를 처리하는 데 사용되는 응답기 체인의 일부이기도합니다. 뷰 컨트롤러는 그 자체로 UIResponder 클래스의 자손이며 관리 뷰와 슈퍼 뷰 사이의 응답 체인에 삽입됩니다. 따라서 응용 프로그램에 하나의 기본보기 컨트롤러를 응답 체인의 일부로 포함시키는 것이 일반적입니다. 일반적으로 UINavigationController, UITabBarController 또는 일반 UIViewController와 같은 기본보기 컨트롤러를 UIWindow에 추가합니다. 예를 들어, 다음을 호출하여 수행 할 수 있습니다.

[myWindow addSubview : primaryViewController.view];

당신을 통해 (주 뷰 컨트롤러와 같은 수준에서) UIWindow에 추가 뷰 컨트롤러의 UIView의 속성을 추가 할 경우 다음

[myWindow addSubview : anotherController.view]

이 추가보기 컨트롤러는 회전 이벤트를받지 않으며 결코 회전하지 않습니다. UIWindow에 추가 된 첫 번째보기 컨트롤러 만 회전합니다.

+0

은 탭 막대의 탭 중 하나에 할당 된 SomeView이거나 탐색 컨트롤러를 통해 다른 탭 중 하나에서 드릴 다운하여 탐색 할 수 있습니까? –

+0

이 UIView와 다른 작동하는 UIView간에 차이가 있어야합니다. 어쩌면 간단한'diff'가 도움이 될 수도 있습니다. –

+0

@PaulTiarks 탭바가 루트입니다. 일부보기는 내비게이션 컨트롤러의 테이블 뷰를 통해 드릴 다운됩니다. – rich

답변

0

그리고 나는 스택에있는 UIViewController를 밀어 코드를 찾고 있었어요 ... 그것을 알아 낸 나는 완전히의 UIViewController을 initied하지 않았다.

1

내 custom navigation controller의 shouldAutorotateToInterfaceOrientation이 tableViewController로 새로운 navigationController를 추가했을 때 tableViewController와 함께 한 방향으로 만 YES를 반환 할 때 UITabBarController가 자동 회전을 멈추었습니다. 해결 방법은 TabBarController 내부의 각 Controller에서 shouldAutorotateToInterfaceOrientation 함수를 확인하는 것입니다.

누군가에게 도움이 될지도 모릅니다.

관련 문제