为了避免在突然轮换后从popover的视图中出现丑陋的UI故障,我只想在发生这种情况时完全忽略popover。但是,无论出于何种原因,各种方向通知,例如(void)willRotateToInterfaceOrientation:duration:当它们位于弹出窗口内时不会被调用。这使得很难在popover的viewController中关闭商店。
a)为什么popover viewControllers中不会出现方向通知?
b)处理这些轮换和必要解雇的最佳方法是什么?
答案 0 :(得分:1)
通常,您的主视图控制器应该获取通知,以便您可以在其中执行操作以使其他视图控制器执行适当的操作,正在进行的操作是使用弹出窗口注册设备旋转通知并像这样处理它。 / p>
答案 1 :(得分:1)
我上面的(a)没有答案,但我确实有一个适用于(b)的工作解决方案......
由于我的一个弹出菜单是“主菜单”,我将它存储在appDelegate中。 AppDelegate本身并没有获得“界面旋转”通知,但它确实听说状态栏方向更改......
- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration {
// a cheat, so that we can dismiss all our popovers, if they're open.
if (menuPopoverPC) {
// if we're actually showing the menu, and not the about box, close out any active menu dialogs too
if (menuPopoverVC && menuPopoverVC == menuPopoverPC.contentViewController)
[menuPopoverVC.popoverController dismissPopoverAnimated:YES];
[menuPopoverPC dismissPopoverAnimated:YES];
menuPopoverPC = nil;
}
}
另外,我发现的一个小技巧是,无论何时你做这些显示/隐藏风格的弹出菜单,通常你都没有太多机会在所有解雇后清理。这有时会导致用户必须单击两次才能打开的菜单按钮。也就是说,除非您将控制器设置为UIPopoverControllerDelegate,否则添加以下内容:
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
// the user (not us) has dismissed the popover, let's cleanup.
menuPopoverPC = nil;
}