Изменение ориентации необходимо, но только для одного из нескольких представлений в TabBarViewController - PullRequest
0 голосов
/ 27 августа 2009

Мое приложение имеет UITabBarController с пятью вкладками. Мне нужно было поворачивать ориентации только для пятой вкладки. Я был в состоянии заставить все пять вращаться в ландшафт путем подклассов UITabBarController

@implementation TabBarControllerRotate

-(BOOL)shouldAutorotateToInterfaceOrientation:
    (UIInterfaceOrientation)interfaceOrientation {

//return (interfaceOrientation == UIInterfaceOrientationPortrait);
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight 
          || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
          || interfaceOrientation == UIInterfaceOrientationPortrait);
}

@ end

if(tbc == nil){
    //tbc = [[UITabBarController alloc] initWithNibName:nil bundle:nil];        
    tbc = [[TabBarControllerRotate alloc] initWithNibName:nil bundle:nil];  ////// new  //////

....

tbc.viewControllers = 
[NSArray arrayWithObjects:viewController1, viewController2, viewController3
 ,viewController4,viewController5, nil];

Теперь мне нужно отключить вращение для viewController1 - 4; Я безуспешно пытался сделать это, добавив следующий код в четыре файла * .m для эти viewControllers.

- (BOOL)shouldAutorotateToInterfaceOrientation:
    (UIInterfaceOrientation)interfaceOrientation {

return NO;
}

Пожалуйста, посоветуйте мне, как получить R Done. Спасибо за чтение, Марк

1 Ответ

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

Я предполагаю, что есть другие более простые способы сделать это, но я наконец нашел решение. Название пятого viewController в TabBarController, единственный что нужно изменить ориентацию, это "MyNotes"

Внутри SubListViewController.m создается объект TabBarControllerRotate.

  tbc = [[TabBarControllerRotate alloc] initWithNibName:nil bundle:nil];
  tbc.viewControllers = [NSArray arrayWithObjects:viewController1
          , viewController2, viewController3, viewController4, viewController5, nil
  tbc.delegate = self;

TabBarController подклассы UITabBarController и включает свойство BOOL имя bMyNotes.

SubListViewController является UITabBarControllerDelegate

При каждом изменении представления в TabBarController отправляется сообщение, а именно - (void) tabBarController: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) viewController

Поэтому SubListViewController.m содержит этот код:

   #pragma mark UITabBarControllerDelegate methods

   - (void)tabBarController:(UITabBarController *)tabBarController 
        didSelectViewController:(UIViewController *)viewController{
    BOOL b = (viewController.title == @"MyNotes");
    [tbc setBMyNotesTab:b];
    //NSLog(@"MyNotesTab == %d", [tbc bMyNotesTab]);

   }

Тогда TabBarControllerRotate.m содержит:

    - (BOOL)shouldAutorotateToInterfaceOrientation:
          (UIInterfaceOrientation)interfaceOrientation {

        //NSLog(@"bMyNotesTab is: %d",self.bMyNotesTab);

        return ( (interfaceOrientation == UIInterfaceOrientationLandscapeRight 
            || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
            || interfaceOrientation == UIInterfaceOrientationPortrait
                 ) && self.bMyNotesTab 
               );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...