Question

My test project.

so i'm testing this so i can use it on my bigger project. I have A tabbarcontroller named TabBar this TabBar has 2 tabs every tab has a navigationcontroller. A viewController with a button (OkButtonViewController) when you click this button you go to the viewcontroller with the label (LabelViewController). The OkButton View Controller is always in portrait and the labelViewController can switch orientation. this works only in one situation it goes wrong. when you are in the LabelViewController, orientated in landscape, and you switch tabs the OkButtonViewController is also in landscape, and stays in landscape. How can i force the viewcontroll to go back to portrait?

here is my code.

I probably need to add something in the TabBar or in the RotatingTabBarAppDelegate. I just don't know what.

TabBar.m

  #import "TabBar.h"

  @implementation TabBar

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  {
      return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
  }

  @end

RotatingTabBarAppDelegate.h

  #import <Foundation/Foundation.h>
  #import "TabBar.h"

  @class RotatingTabBarAppViewController;

  @interface RotatingTabBarAppDelegate : NSObject<UIApplicationDelegate>
  {
      IBOutlet UIWindow *window;
  }

  @property (nonatomic, strong) UIWindow *window;

  @end

RotatingTabBarAppDelegate.m

  @implementation RotatingTabBarAppDelegate

  @synthesize window;

  -(void) applicationDidFinishLaunching:(UIApplication *)application
  {
      UIViewController *tab1 = [[UIViewController alloc] init];
      tab1.tabBarItem =[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemTopRated tag:0];

      UIViewController *tab2 = [[UIViewController alloc] init];
      tab2.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1];
      TabBar *tbc = [[TabBar alloc] init];

      [tbc setViewControllers:[NSArray arrayWithObjects:tab1, tab2, nil]];

      [window addSubview:tbc.view];

      [window makeKeyAndVisible];


  }

  @end

OkButtonViewController.h

   #import <UIKit/UIKit.h>

  @interface OkButtonViewContoller : UIViewController


  - (IBAction)ok;

  @end

OkButtonViewController.m

  #import "OkButtonViewController.h"
  #import "LabelViewController.h"

  #define kDetailSegue @"Detail"

  @implementation OkButtonViewContoller


  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  {
      return (interfaceOrientation == UIInterfaceOrientationPortrait);

  }

  - (IBAction)ok 
  {
      [self performSegueWithIdentifier:kDetailSegue sender:@"test"];
  }

  - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      if ([segue.identifier isEqualToString:kDetailSegue]) {
          ((LabelViewController *)segue.destinationViewController).testTekst = sender;
      }
  }

  @end

LabelViewController.h

  #import <UIKit/UIKit.h>

  @interface LabelViewController : UIViewController

  @property (nonatomic, strong) NSString *testTekst; 
  @property (nonatomic, strong) IBOutlet UILabel *testLabel;

  @end

LabelViewController.h

  #import "LabelViewController.h"

  @implementation LabelViewController
  @synthesize testTekst;
  @synthesize testLabel;

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
  {
      return YES;
  }

  -(void)viewWillAppear:(BOOL)animated
  {
      [super viewWillAppear:animated];
      self.testLabel.text = testTekst;
  }

  @end

sorry for the bad english.

Was it helpful?

Solution

You cannot force a view to rotate, probably Apple would reject your app, you need to find another way to design this.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top