更改ViewControllers on Orientation在运行时更改

时间:2013-12-08 11:32:32

标签: ios objective-c ipad cocoa-touch

我想更改ViewControllers On Screen方向更改

我只有一个类ViewController和两个StoryboardBased UIViewControllers。

  UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)
    {
        [[NSBundle mainBundle] loadNibNamed:@"Portrait" owner:self options:nil];
    }
    else {
        [[NSBundle mainBundle] loadNibNamed:@"Landscape" owner:self options:nil];
    }

此代码可用于在方向更改时加载不同的xib。但是如何在方向更改时在Xib文件中加载不同的控制器?

3 个答案:

答案 0 :(得分:1)

你可以这样做

   - (void)viewDidLoad
     {
          [[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged:)  name:UIDeviceOrientationDidChangeNotification  object:nil];   
     }

     -(void)orientationChanged:(NSNotification *)notification
      {
           UIInterfaceOrientation toInterfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];

           if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
           {
                [[NSBundle mainBundle] loadNibNamed:@"Portrait" owner:self options:nil];            
           }
           else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation))
           {
                [[NSBundle mainBundle] loadNibNamed:@"Landscape" owner:self options:nil];
           }
      }
希望这会对你有所帮助......

答案 1 :(得分:0)

当您使用此方法时,您不会在xib中加载不同的视图控制器。一个xib代表一个带有子视图的视图。

然而,我会追随另一个方法。我将创建一个视图A(“主机”视图控制器的self.view),它只有两个全屏容器视图,一个用于横向,一个用于纵向。 只需进行两次自动调整,以便它们始终占据整个屏幕。

旋转后,我会相应地隐藏和取消隐藏它们。

但为什么你认为每次旋转需要单独的视图控制器?

答案 2 :(得分:0)

这里最好的方法可能就是使用view controller containment api。你应该做的是有一个包装器视图控制器,它嵌入来自2个视图控制器的两个视图(每个方向一个),并使用iOS API提供的方法respond to orientation change在视图之间切换