UIViewController и UISplitViewController в UITabBarController shouldAutorotateToInterfaceOrientation - PullRequest
3 голосов
/ 23 июля 2010

У меня есть некоторые проблемы с моим кодом iPad.

У меня есть UITabBarController, который содержит некоторые UIViewController и UISplitViewController.Проблема в том, что UIViewController и даже UISplitViewController не распознают Изменения ориентации правильно.

Я установил mustAutorotateToInterfaceOrientation на моем TabBarController и всех UIViewController, но я понял, что только MyRotateToInterfaceOriController из RootteToInController в TopB.Если я удалю shouldAutorotateToInterfaceOrientation из моего TabBarController, будет вызвано willRotateToInterfaceOrientation из моего подчиненного элемента UIViewControllers.Самая большая проблема - это мой UISplitViewController, потому что он будет поворачиваться к новому interfaceOrientation, но застрянет в его книжном макете.

Как правильно реализовать TabBarController с ViewControllers и Splitview, включая изменения ориентации?

Ответы [ 2 ]

0 голосов
/ 28 августа 2010

Обратите внимание, что второе предложение ссылки на класс UITabBarController гласит: «Этот класс не предназначен для создания подклассов».

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

0 голосов
/ 26 июля 2010

Эй, я сам придумал Обходной путь.Чтобы вспомнить проблему, только первый вид дополнения к окну распознает изменения ориентации.

Я переклассифицировал мой TabBarController и заставил его повернуть Поворот к ориентации интерфейса

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self adjustViewsForOrientation:toInterfaceOrientation];    
}

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"Landscape");
        //Do Your Landscape Changes here


    }
    else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
        NSLog(@"Portrait");
        //Do Your Portrait Changes here
    }
}

Но теперь "viewControllers""моего TabBarController по-прежнему не распознает мои InterfaceOrientations.Итак, я придумал следующее:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    for (int i = 0; i < [self.viewControllers count]; i++ ) {
        [[self.viewControllers objectAtIndex:i] didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    }
}

Это вызовет метод didRotateFromInterfaceOrientation из всех подклассов TabBarController:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    [self adjustViewsForOrientation:self.interfaceOrientation];
}

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
        NSLog(@"Subview Landscape");
        //Do Your Landscape Changes here
    }
    else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
        NSLog(@"Subview Portrait");
        //Do Your Portrait Changes here
    }
}

Как вы можете видеть, я вызываю [self adjustViewsForOrientation:self.interfaceOrientation]; в моемSub Viewcontroller, который даст актуальную ориентацию методу регулировки.Если вы используете fromInterfaceOrientation, это будет неправильная ориентация, потому что изменение уже сделано!

Другая моя проблема - UISplitviewController в TabBarController, но я, по-видимому, заставил его работать приемлемым образом.Проблема такая же, как и для UIViewControllers.Он не будет пересматривать изменения ориентации, так что вы должны создать его подкласс, но я уверен, что он заработает на 100%.Когда я искал в Интернете, я нашел хороший пример кода для сборки Splitview.Так что, может быть, вы попробуете: http://blog.trustedones.com/development/ipad-uisplitviewcontroller-replacement-for-sethidesmasterviewinportrait http://www.trustedones.com/apps/ipad

Он также поддерживает SplitView в портретном режиме, поэтому вам, возможно, понравится.Я делаю!

Надеюсь, что смогу помочь кому-нибудь с этим постом. Приветствия, нетц

...