0

在我的应用程序的某些页面上更改我的方向时遇到问题。该shouldAutoRotate功能不会在任何一页上触发。我做了一些挖掘,希望有人能告诉我这段代码是否正确。

我有一个窗口、一个名为 homepageController 的导航控制器和一个名为 mainController 的标签栏控制器。该应用程序的工作方式如下。我提供 homepageController 供用户登录。输入正确的登录密钥后,我从窗口中删除 homepageController 视图并添加 mainController 视图。这是代码

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.6];
[UIView setAnimationDelegate:self];

[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:appDel.homePageController.view.superview cache:NO];

[appDel.homePageController.view removeFromSuperview];

[UIView commitAnimations];

[appDel.window addSubview:appDel.mainController.view];
[appDel.mainController setSelectedIndex:0];
[appDel.window bringSubviewToFront:appDel.mainController.view];

我转到标签栏上的第一页并尝试旋转它,并在 上设置断点shouldAutoRotate,但它永远不会触发。

我再次进行了一些挖掘,发现我shouldAutoRotate在 homepageController 的 .m 文件中的方法会在我改变方向时被触发。我查看了我的 xib 文件,这就是我所拥有的。

在此处输入图像描述

我看到我的 homepageController 是 rootViewController 并且在 mainController 上从选项卡切换到选项卡时,我正在使用此代码。

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{

    UINavigationController *nav = (UINavigationController *) viewController;
    [nav popToRootViewControllerAnimated:NO];

}

所以看到我的 homepageController 是 rootViewController 这就是为什么shouldAutoRotate总是在那里被调用。

我想知道是否有更好的解决方案。我不认为我这样做是对的,所以任何指导都会很棒。

谢谢

4

1 回答 1

0

我认为shouldAutoRotate没有打电话是因为你正在使用addSubView:like

[appDel.window addSubView: appDel.mainController]

将您的 viewcontrollers 设置为 rootviewControllers 您在窗口中用作 addSubview 的任何地方。

所以使用

    appDel.window.rootViewController= appDel.mainController;

可能是现在shouldAutoRotate会火的事件。

希望对你有效。

于 2013-04-19T19:16:18.183 回答