아주 간단한 일을하려고합니다 :보기 컨트롤러가 1 스택 인 것을 제외하고는 내 응용 프로그램에서 가로 방향 만 지원하십시오. 단순화를 위해 두 개의 UIViewController가 있다고 가정 해 보겠습니다. maskLandscapeVC 및 maskAllVC를 호출 할 수 있습니다. 각각은 사용자 지정 UINavigationController의 자체 인스턴스에 별도로 포함됩니다. 다음은 네비게이션 컨트롤러의 코드입니다.하나의보기 컨트롤러에서 여러 방향 지원하기
#import "MPTLoginNav.h"
@interface MPTLoginNav()
@end
@implementation MPTLoginNav
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark
#pragma Interface Orientaiton Methods
- (NSUInteger)supportedInterfaceOrientations
{
if (self.isMaskAllStack)
return UIInterfaceOrientationMaskAll;
return UIInterfaceOrientationMaskLandscape;
}
- (BOOL)shouldAutorotate
{
return YES;
}
@end
maskLandscapeVC에서이 코드는 올바르게 작동하며 두 개의 수평 방향 만 사용할 수 있습니다. 사용자는 maskLandscapeVC에서 maskAllVC로 이동할 수 있습니다. 다음 코드는이를 처리합니다.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle bundleForClass:[self class]]];
self.maskAllVC = [storyboard instantiateViewControllerWithIdentifier:@"maskAllVC"];
[self.navigationController pushViewController:self.maskAllVC animated:YES];
maskAllVC에서 코드는 훌륭하게 작동하며 4 방향 모두 지원됩니다.
maskAllVC에서 일단 사용자는 수직 방향으로 전환합니다. maskLandscapeVC는 maskAllVC의 대리자입니다. maskAllVC의 세로 방향에서 사용자가 일부 버튼을 누릅니다. 이 버튼은 일부 조건에 따라 대리자 (maskLandscapeVC)에 대한 호출을 수행하며 maskLandscapeVC는 maskAllVC를 해제하기로 결정합니다. 그것은 지금 다시 maskLandscapeVC에 다음 코드를
[self.maskAllVC.navigationController popViewControllerAnimated:YES];
[self.maskAllVC.navigationController dismissViewControllerAnimated:YES completion:nil];
를 사용, 방향은 여전히 수직 물론 내 생각이 완전히 그것 때문에 엉망이다.