ViewController没有响应didRotateFromInterfaceOrientation

时间:2010-10-05 03:47:53

标签: iphone objective-c

我的视图控制器没有响应didRotateFromInterfaceOrientation,尽管我在代码中添加了以下内容:

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

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    [self.popOver dismissPopoverAnimated:NO];
    if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    ... My Custom Code...   
    }
}

我在这里做错了吗?

3 个答案:

答案 0 :(得分:3)

如果你不能从UIViewController继承(这是不幸的),你可以使用this

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

然后注册以开始接收UIDeviceOrientationDidChangeNotification通知。

答案 1 :(得分:2)

如果你的UIViewController是某个根视图中的子节点,那么IB默认情况下不会将它作为子控制器添加到根控制器。解决此问题的最简单方法是修改根控制器:

- (void)viewDidLoad
{
    [super viewDidLoad];    
    [self addChildViewController:(UIViewController*) self.yourChildController];
}  

这应该可以解决问题。现在您的子控制器将同时接收:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

消息。

答案 2 :(得分:0)

我认为这里真正的答案(更准确地说是关联问题的答案)是你需要打电话

[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];

didRotateFromInterfaceOrientation方法的子类实现中。例如:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    // Then your code...
}

苹果文档中没有提到这一点,但在省略时会给我带来一些严重且无法解释的问题...