Установка ориентации после раскрутки

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

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

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

https://www.dropbox.com/s/a5epj9tpmk85cnv/segueproblem.mov

TabBarController.m

@implementation UITabBarController (autoRotate)

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

NavController.m

@implementation UINavigationController (autoRotate)


- (BOOL)shouldAutorotate {
    return [self.visibleViewController shouldAutorotate];
}

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

BViewController.m

@implementation BViewController

- (BOOL)shouldAutorotate {
    return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}
- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue {
}

CViewController.m

@implementation CViewController

- (BOOL)shouldAutorotate {
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}


- (IBAction)backbutton:(id)sender {
}

person jclark754    schedule 01.07.2014    source источник
comment
Попробуйте добавить журналирование или точки останова в свой supportedInterfaceOrientations и посмотрите, что происходит в момент увольнения. С ними консультируются? Они возвращают ответ, который вы хотите, чтобы они вернули?   -  person matt    schedule 01.07.2014
comment
Кстати, в iOS 8 это не сработает. вообще, кажется, поэтому вы можете начать отходить от всей этой модели.   -  person matt    schedule 01.07.2014
comment
Привет, Мэтт, спасибо за ответ, какие методы вы бы предложили вместо этого использовать для подготовки к iOS 8? Я просто пытаюсь заставить два контроллера представления во всем моем проекте использовать все ориентации, а остальные ограничить портретом внутри tabcontroller›navcontrollers.   -  person jclark754    schedule 01.07.2014
comment
Ой, ваша ссылка была супер камуфляжной, и я не уловил ее с первого раза, похоже, в iOS 8 вы не сможете ограничить отдельные контроллеры представления определенными ориентациями в соответствии с комментариями к вашей ссылке. К сожалению, я просто пытаюсь отображать карты с нашего веб-сервера и позволять пользователю выбирать ориентацию. Контроллеры предыдущих представлений (детализированные таблицы) действительно не имеют никакого отношения к ландшафту. Вернуться к доске для рисования. Любые профессиональные советы?   -  person jclark754    schedule 01.07.2014
comment
В iOS 8, похоже, от вас ожидают гибкости. В конце концов, нет никаких причин, по которым представления таблиц нельзя отображать в альбомной ориентации.   -  person matt    schedule 01.07.2014
comment
Ага. Подумайте об удалении и публикации в качестве ответа, и я дам вам некоторую репутацию. Кроме того, у меня есть одна из ваших книг, но, по общему признанию, я ее еще не читал. Не суди меня.   -  person jclark754    schedule 01.07.2014


Ответы (1)


Я не думаю, что вам нужно много кода.

Попробуй это:

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortRait animated:YES];
person Mika    schedule 01.07.2014
comment
не уверен, кто дал вам отрицательный голос, но этот метод только действительно ориентирует строку состояния обратно в верхнюю часть контроллера представления, он не берет с собой оставшуюся часть vc. Я поместил этот код в метод viewdidappear - person jclark754; 01.07.2014