Пейзаж только UIViewController в UINavigationController

Я имею UITableViewController в котором на одной вкладке есть UINavigationViewController, UINavigationController корневым контроллером представления является UITableViewController, и при нажатии на ячейку, UIViewController появляется, который должен быть заблокирован в Landscape,

Я хочу, чтобы каждый контроллер был заблокирован в Portraitкроме упомянутых UIViewController это должно быть заперто в Portrait,

Я пробовал следующее:

CustomTabBarController.m:

#import "CustomTabBarController.h"

@implementation CustomTabBarController

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // You do not need this method if you are not supporting earlier iOS Versions
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

- (BOOL)shouldAutorotate{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations{
    return [self.selectedViewController supportedInterfaceOrientations];
}

@end

CustomNavigationController.h:

#import "CustomNavigationController.h"

@implementation CustomNavigationController

-(NSUInteger)supportedInterfaceOrientations
{
    return [self.topViewController supportedInterfaceOrientations];
}

-(BOOL)shouldAutorotate
{
    return YES;
}

@end

И в UIViewController, который должен быть привязан к ландшафту, я поставил:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

Но это не работает, я могу повернуть его в альбомную ориентацию, и он останется заблокированным в альбомной ориентации, но я хочу, чтобы он автоматически отображался в альбомной ориентации.

Какие-либо предложения?

3 ответа

Попробуйте с помощью метода заблокировать некоторые ориентации для определенного окна:

– application:supportedInterfaceOrientationsForWindow:

Попробуйте переопределить метод

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

У меня была большая проблема в прошлом с UITabBarController не уважая мои поддерживаемые ориентации интерфейса отображаемых контроллеров представления.

Я решил проблему путем подкласса UITabBarController и захват, когда элемент был выбран. Затем я бы сам вызвал контроллер представления, спросил, каковы поддерживаемые ориентации, и сам включил бы вращение, если это необходимо. Я также вызвал бы выбранный контроллер представления на поворотах, чтобы установить / изменить мои поддерживаемые ориентации.

Я реализовал UITabBarDelegate и использовал didSelectItem захватить вкладки переключателей. Я не уверен, есть ли лучший способ сделать это сейчас.

Другие вопросы по тегам