didRotateFromInterfaceOrientation在旋转时没有触发?

时间:2011-04-25 01:23:10

标签: ios ipad rotation

  

可能重复:
  ViewController not responding to didRotateFromInterfaceOrientation

我遇到了在我的一个viewcontroller子类中没有触发的didRotateFromInterfaceOrientation方法的问题。

我有一个带有UISplitViewController的iPad应用程序作为主视图。在细节方面,我使用“隐藏”(无工具栏,导航栏)导航控制器进行延迟视图切换。我想要捕获didRotateFromInterfaceOrientation的ViewController是navcontroller层次结构中的两个级别。 (这些都不应该有所作为,但我会包含这些信息,以防有一些我不知道的特殊情况)

我有:

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

// This doesn't work. :(
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    NSLog(@"Rotate Go!");
}

视图旋转正常,但didRotateFromInterfaceOrientation永远不会触发。

知道我缺少什么吗?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

消息。

答案 1 :(得分:0)

好吧,我从未弄清楚为什么事件没有解雇,但我确实找到了解决方法:

在两个UISplitViewController委托方法splitViewController:willHideViewController:withBarButtonItem:forPopoverController:splitViewController:willShowViewController:invalidatingBarButtonItem:中,我正在检测我的视图是否可见,然后在此处执行我的轮换逻辑。