2012-12-18 2 views
1

Я уже застал эту проблему более 2 недель! В моем проекте у меня есть 1 единственный ViewController (слайд), который я хочу включить как в альбомную, так и в портретную. Остальные все контроллеры/представления (слайды) Я хочу включить только портретный режим.Показан UINavigationController в модальном сегменте (ViewController)?

Сложная часть: «ViewController», к которому я обращаюсь, связан как с навигационными контроллерами, так и с TabBarControllers. См. Схему ниже, где ViewController, который я хочу включить как пейзаж, так и портрет, называется: Refer ReferViewController.

TabBarController ----> NavigationController ----> FristViewController - (толчок событие) ->ReferredViewController

До сих пор я пытался сделать КАТЕГОРИЯ как для NavigationControllers, так и для TabBarControllers. Но поскольку мои NavigationControllers и TabBarControllers размещены в самом начале проекта, это установит правила для всего проекта. Мой ReferredViewController размещается в конце или в середине проектов «раскадровка». Я попытался установить правила по коду, а также для одиночного ReferredViewController без каких-либо успехов.

Мой лучший снимок - изменить событие между FirstViewController и ReferredViewController с «push» на «modal». ReferredViewController может затем поворачивать как портрет/пейзаж, так и остальную часть проекта заблокирован в портрете. НО, поскольку вы, возможно, знаете, что все навигационные системы (NavigationBar) будут потеряны, и пользователь застрянет на этом единственном слайде.

Так что я пытаюсь включить Панель навигации в следующем примере кода в файле ReferredViewController.m:

ShowTaskViewController *detailViewController = [[ShowTaskViewController alloc] init]; 
UINavigationController *navController = [[UINavigationController alloc]  initWithRootViewController:detailViewController]; 

navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self.navigationController presentModalViewController:navController animated:YES completion:nil]; 
[navController release]; 
[detailViewController release]; 

Но OFC ничего не происходит, и я вернулся на круги своя снова: O. FML!

ответ

0

Вы должны пройти через UITaBarController, потому что это вы базовый контроллер. Я сделал это для своего навигационного контроллера. Скажите, помогло ли это.

@interface UINavigationController (Autorotation) 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation; 
- (BOOL) shouldAutorotate; 
- (NSUInteger) supportedInterfaceOrientations; 
@end 

@implementation UINavigationController (Autorotation) 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{ 

if ([self.visibleViewController isKindOfClass:[MWPhotoBrowser class]] || [self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) { 
    return YES; 
} 
return (toInterfaceOrientation == UIInterfaceOrientationPortrait); 
} 

-(BOOL) shouldAutorotate{ 
    return YES; 
} 

-(NSUInteger) supportedInterfaceOrientations{ 

    if ([self.visibleViewController isKindOfClass:[MWPhotoBrowser class]] ||  [self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) { 
    return UIInterfaceOrientationMaskAll; 
} 

return UIInterfaceOrientationMaskPortrait; 
} 
1

В этой строке:

[self.navigationController presentModalViewController:navController 
              animated:YES 
              completion:nil]; 

вы соединяя два UIViewController методы экземпляра:

- (void)presentViewController:(UIViewController *)viewControllerToPresent 
        animated:(BOOL)flag 
        completion:(void (^)(void))completion 

- (void)presentModalViewController:(UIViewController *)modalViewController 
          animated:(BOOL)animated 

Первый из них в настоящее время стандарт, второй метод был устаревшим в iOS6.

Также диспетчер представлений должен быть сам (ReferredViewController), а не self-navigationController.

Ваш контроллер представлены вид может отклонить себя таким образом

[[self presentingViewController] dismissViewControllerAnimated:YES 
                completion:(void (^)(void))completion]; 

Но взгляните на ответ fibnochi, это может быть лучше для вас, чтобы достичь результата.