所以我在我的应用程序中显示了一个模态视图,其中包含一些用户填写的信息。问题是当旋转设备时,会发生一些动画,但仅在帧中。表单本身不会旋转。所有自动旋转选项都设置为YES。当用户点击弹出窗口中的字段时,我正在显示它。这让我怀疑它与此有关,但我不确定。这是古怪的,因为如果设备在任一视图中,然后显示模态窗口,它是好的。只有在模态视图中旋转设备时才会发生这种情况。有没有人知道在旋转设备时可能导致此行为的原因是什么?谢谢!
这是在popover视图控制器中处理的片段:
if (currentLevel == 1 && businessOrLocation == 0){
if(tbsViewController == nil)
tbsViewController = [[BusinessFilteredViewController alloc] initWithNibName:@"BusinessFilteredView" bundle:[NSBundle mainBundle]];
NSMutableArray *tempBusiness = [[NSMutableArray alloc] init];
for (id theKey in appDelegate.groupedBusiness) {
NSMutableArray *tempArr = [appDelegate.groupedBusiness objectForKey:theKey];
[tempBusiness addObject:tempArr];
}
tbsViewController.businessOrLocation = businessOrLocation;
tbsViewController.modalPresentationStyle = UIModalPresentationFullScreen;
tbsViewController.modalTransitionStyle = UIModalPresentationFullScreen;
[self presentModalViewController:tbsViewController animated:YES];
}
答案 0 :(得分:5)
我也遇到了这个问题。根本问题是,popover控制器无法呈现模态视图 - 似乎没有正确考虑或设计案例。在我的情况下,解决这个问题很容易。我只是扩展了我的popover托管视图控制器的委托协议。主视图将自身设置为弹出视图的委托,并负责显示和解除用户在弹出框中请求的模态视图。
由于我已经有一个委托协议,当用户点击“完成”时干净地忽略弹出窗口视图,因此只需要一小段时间就可以按照我想要的方式进行自动旋转。以下是一些片段:
@protocol InfoViewControllerDelegate <NSObject>
@optional
// Implement this to close the info view once the user clicks done.
- (void)infoViewDidFinish:(InfoViewController *)view;
// Implement this method if the delegate launched us as a popup view and must therefore
// take responsibility for diplaying help.
- (void)infoViewDidRequestHelp:(InfoViewController *)view;
@end
在我的主iPad视图中显示了这个弹出视图:
#pragma mark - InfoViewControllerDelegate methods
- (void)infoViewDidFinish:(InfoViewController *)view {
[self hideInfo:self];
}
- (void)infoViewDidRequestHelp:(InfoViewController *)view {
[self hideInfo:self]; // Close the info view first
HelpViewController *help = [[HelpViewController alloc] init];
help.delegate = self;
[self presentModalViewController:help animated:YES];
[help release];
}
为了让我在弹出视图之外启动信息视图的情况下简单生活(例如,在iPhone上,这是一个简单的模态视图),它会检查委托是否处理模态子视图,以及如果没有,自己处理它们。这样我根本不需要更换iPhone底座控制器,因为自动旋转在那里工作得很好。这是信息视图控制器中的“帮助”按钮操作,显示了我是如何做到的:
- (IBAction)help:(id)sender {
if ([delegate respondsToSelector:@selector(infoViewDidRequestHelp:)]) {
[delegate infoViewDidRequestHelp:self];
} else {
HelpViewController *help = [[HelpViewController alloc] init];
help.delegate = self;
[self presentModalViewController:help animated:YES];
[help release];
}
}
使用此代码,无论是否涉及弹出视图,我的整个界面都会在两台设备上平滑自动旋转。
答案 1 :(得分:0)
正如我所理解的那样......如果用户点击某个元素,那么你正在显示一个popover并在popover内部然后你正在显示一个全屏模态视图控制器? Vie之前从未尝试过,有两个原因似乎很奇怪。
首先,在我看来,这对用户来说似乎很不利。 popover为您提供了一个漂亮的集成UI,模式将带您离开。
更重要的是,你的popover视图控制器并没有真正拥有整个屏幕的权限,所以从一个popover呈现全屏模式似乎本身就是错误的。
我建议您在弹出控制器中显示一个导航控制器,而不是在整个屏幕上以模态方式显示新的视图控制器,只需将其推送到弹出窗口中的导航控制器,并将用户保留在弹出框内。
如果这对您不起作用,那么我建议您查看您的UI需求并重新设计布局。
答案 2 :(得分:0)
我猜您在- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
中实施了BusinessFilteredViewController
并返回YES
您可以检查是否向应用程序窗口添加了多个子视图。如果是这样,请尝试为要添加到窗口的所有viewControllers创建容器UIViewController
。