UISplitViewController中的ActionSheet在纵向模式下的行为与横向模式不同

时间:2011-10-01 14:55:45

标签: ios ipad uisplitviewcontroller uipopovercontroller uiactionsheet

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

然后我将一个Action Button添加到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 个答案:

答案 0 :(得分:3)

此行为是设计使然,如果它是纵向模式中的弹出窗口,那么您将有2个级别的弹出窗口。

这在技术上可以通过实施您自己的UIPopover版本或使用已编写的人(WEPopover)来实现。

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

Refresh Button

另一方面,'管理职能',如果与列表中的数据没有直接关系,可能需要一个新的家,也许需要你的应用程序的主视图?很难说在不了解结构的情况下最好放在哪里。

答案 1 :(得分:0)

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

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

还有一个问题是你是否真的想在屏幕上同时使用两个弹出窗口。但如果你这样做,就是这样做的。