在UISplitViewController中使用ActionSheet,横屏模式和竖屏模式的效果不同。

5

我使用分割视图应用程序模板创建了一个新的应用程序。

然后,我向rootViewController导航控制器添加了一个名为actionButton的操作按钮。

当按下按钮时,我会显示一个ActionSheet,如下所示:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
    delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
    otherButtonTitles:@"Admin Functions", @"Refresh Data", nil];
[actionSheet showFromBarButtonItem:actionButton animated:YES];
[actionSheet release];

在横屏模式下,当我按下按钮后,它以期望的方式在弹出窗口中显示操作表,指向按钮(正如我所预期的):Landscape Mode 但是,在纵向模式下,它看起来完全不同,并且菜单从rootViewController popover底部弹出,就像在iPhone上一样:Portrait Mode 我的问题是,如何使ActionSheet在纵向模式下像在横向模式下一样出现在顶部?
由于这是一个“实用菜单”,它与正在显示的数据没有直接关系,因此不应该成为popover的一部分。
2个回答

3

这种行为是有意设计的,如果在竖屏模式下是一个弹出窗口,那么您将会有两个级别的弹出窗口。

通过实现自己的UIPopover版本或使用其他人已经编写的(WEPopover),技术上是可行的。

但是,这是一个糟糕的设计选择。您说这些功能与数据无关,然而其中有一个是“刷新数据”。我建议用一个刷新图标来替换操作按钮,例如Apple在“查找我的朋友”中使用的图标:

Refresh Button

其他的'管理功能',如果与列表中的数据没有直接关联,可能需要一个新的位置,也许是在您应用程序的主视图中?不知道结构更多的信息很难说最好放在哪里。

谢谢回复!不幸的是,我展示的图片只是模拟图,并旨在简单地展示它在做什么,具体操作是不同的。实际应用程序与邮件应用程序非常相似,左侧视图显示列表,右侧视图显示详细信息。由于菜单项指的是整个应用程序(而不是详细项),我认为它属于左视图。这个页面是我的应用程序的主视图,所以我需要找一个地方放置菜单项。由于有5-6个菜单项,由于空间有限,它真的需要是下拉菜单。 - lnafziger
问题仍然存在,您有两个级别的UIPopover(列表和菜单)。如果您愿意在纵向模式下放弃将列表放在弹出窗口中,而只是存在于左侧,我建议使用[MSSplitViewController](http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad/)而不是使用UISplitViewController。但是,如果不了解更多应用程序细节,很难制定更好的行动方案。 - Alastair Stuart

0

另一种可能性是将操作按钮从根视图控制器的右边缘移动到详细视图控制器的左边缘。

例如,如果操作按钮位于第一个屏幕截图中垂直条的右侧(意味着它位于详细视图控制器的左边缘),那么当您旋转到纵向模式时,它将出现在第二个屏幕截图中“事件”按钮的右侧。您仍然可以调用UIActionSheet的showFromBarButtonItem:animated方法,在弹出模式下显示操作表。

仍然存在一个问题,即您是否真的想要同时在屏幕上显示两个弹出窗口。但如果您确实想要这样做,这就是如何做到的。


来自iOS视图控制器编程指南的内容:“注意:在显示另一个视图控制器模态时,您应该始终关闭可见的弹出窗口。有关何时以及如何在应用程序中使用弹出窗口的具体指南,请参阅iOS人机界面指南中的“弹出窗口(仅限iPad)”。” - Steve Liddle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接