切换到横向视图并使用标签栏控制器

时间:2011-11-11 22:07:05

标签: objective-c ios xcode views

我正在为我的应用使用标签栏控制器。如果我在一个名为“results”的视图控制器中,并且ios设备旋转到横向模式,它会切换我创建的另一个名为landScape的视图。这已在方法

中完成
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrient‌​ation duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight ||
        toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
    {
        self.view=landScape;
    } else {
        self.view=originalView;
    }
}

只要我在标签栏中的特定控制器(示例结果视图控制器)中,它就可以正常工作。然而;如果我转到我的标签栏控制器中的另一个元素并且我的手机在横向模式下倾斜然后我决定转到resultsviewcontroller,它不会调用我的视图landScape,而是尝试自行调整视图并且它看起来可怕。我应该调用方法 - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)在viewDidLoad方法中的持续时间来解决问题?或者这完全错了?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

问题是,当它是活动视图控制器并检测到旋转时,您只设置resultsViewController.view。试试这个:

- (void)setViewForInterfaceOrientation:(UIInterfaceOrientation)orientation
{
    self.view = UIInterfaceOrientationIsPortrait(orientation)
        ? originalView
        : landScape;
}

- (void)viewWillAppear
{
    [self setViewForInterfaceOrientation:[[UIDevice currentDevice] orientation];
    [super viewWillAppear];
}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrient‌​ation duration:(NSTimeInterval)duration
{
    [self setViewForInterfaceOrientation:toInterfaceOrientation];
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}