Задаване на ориентация след размотаване

Имам проблеми с извършването на преход към предишния контролер за изглед, като същевременно запазвам предпочитаната ориентация на контролерите за предишния изглед. Внедрих категории в tabbarcontroller, navcontroller и различни контролери за изгледи, за да заменя методите за завъртане, и освен този единствен проблем, тези контролери поддържат поддържаните изгледи.

Създадох бутон на контролера за модален изглед, който се развива към предишния контролер. Когато натисна този бутон, докато съм в пейзаж, той се отвива до предишния, но в пейзаж, въпреки че предпочитаната/поддържана ориентация на viewcontroller е портретна.

Бих искал да изпълня това разгъване, като същевременно не му позволявам да показва контролера като пейзаж (сегментът е обратно към портрет). Включих кратък видеоклип, показващ моя проблем.

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 няма да можете да ограничите отделните контролери за изглед до определени ориентации според коментарите към връзката ви. Жалко, тъй като просто се опитвам да покажа карти от нашия уеб сървър и да позволя на потребителските предпочитания за ориентация. Предишните контролери за изгледи (drilldown tableviews) наистина нямат работа в ландшафта. Обратно към чертожната дъска. Някакви професионални съвети?   -  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