UIViewController自动旋转不起作用

时间:2011-11-08 16:28:56

标签: iphone objective-c uiviewcontroller autorotate

我在这个问题上找到了很多,但我无法弄明白。任何帮助都会受到大力赞赏!

我有一个使用UITabBarController设置的应用程序。在其中一个选项卡中,我正在显示一个UITableView,它使用UINavigationController来允许层次结构。当方向改变时,所有表都旋转得很好,直到我到达层次结构中的最终视图。

最终视图是不是 UITableView,只是一个基本的UIView。但我不能让这个页面成功旋转!我已经用所需的绝对基础重新制作了视图,但它仍然不想工作!代码如下,但它现在几乎是一个标准模板,现在没有任何内容。

另外,我没有使用InterfaceBuilder,而且应该在所有视图上都应该使用AnyTotoToInterfaceOrientation。这是我遇到问题的唯一一个。

SomeView.h

#import <UIKit/UIKit.h>
@interface SomeView : UIViewController
{
    NSString *someID;
    NSString *someName;
}
@property(nonatomic,retain) NSString *someID;
@property(nonatomic,retain) NSString *someName;
@end

SomeView.m

#import "SomeView.h"
#import "AppDelegate.h"
@implementation SomeView
@synthesize someID, someName;

-(void)loadView
{
}

-(void)viewDidLoad
{
    [super viewDidLoad];
}

-(void)viewDidUnload
{
    [super viewDidUnload];
}

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

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
    NSLog(@"willAnimateRotationToInterfaceOrientation");
}

-(void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

-(void)dealloc
{
    [super dealloc];
}
@end

2011年11月10日更新

我仍然遇到这个问题,但是通过文档和位查看这似乎是我的问题(http://developer.apple.com/library/ios/#qa/qa1688/_index.html

  

视图控制器的UIView属性嵌入在UIWindow中,但与其他视图控制器一起嵌入。

     

您可能会发现在启动时为给定视图控制器调用一次shouldAutorotateToInterfaceOrientation但在旋转设备时不再调用的情况。由于视图控制器与它们管理的视图紧密绑定,因此它们也是用于处理事件的响应程序链的一部分。视图控制器本身是UIResponder类的后代,并插入到托管视图及其超级视图之间的响应程序链中。因此,通常的做法是在应用程序中将一个主视图控制器作为响应程序链的一部分。您通常会向UIWindow添加一个主视图控制器,如UINavigationController,UITabBarController或通用UIViewController。例如,这可以通过调用:

来完成      

[myWindow addSubview:primaryViewController.view];

     

如果您通过以下方法将其他视图控制器的UIView属性添加到UIWindow(与主视图控制器处于同一级别):

     

[myWindow addSubview:anotherController.view];

     

此附加视图控制器不会接收旋转事件,也不会旋转。只有添加到UIWindow的第一个视图控制器才会旋转。

2 个答案:

答案 0 :(得分:1)

我的UITabBarController停止自动旋转,当我用tableViewController添加一个新的navigationController并且没有注意到时,我的自定义导航控制器的shouldAutorotateToInterfaceOrientation仅针对一个方向返回YES。解决方案是在TabBarController中的每个Controller中检查shouldAutorotateToInterfaceOrientation函数。

可能对某人有帮助。

答案 1 :(得分:0)

我已经弄清楚了...... 我正在查看将UIViewController推送到堆栈的代码,而我还没有完全启动UIViewController。