iOS 8 iPad只有动作表的bug

时间:2014-10-02 22:06:54

标签: ios xcode uiactionsheet

在运行iOS 8的iPhone上,下面的代码会弹出一个操作表。但是,在运行iOS 8的iPad上,下面的代码不会导致弹出操作表,而是没有任何反应。

NSUserDefaults *defauj = [NSUserDefaults standardUserDefaults];
NSArray *cod = [defauj objectForKey:@"customlistofstuff"];

UIActionSheet* actionSheet = [[UIActionSheet alloc] init];
actionSheet.delegate = self;
for(int i=0;i<[cod count];i++)
{
    [actionSheet addButtonWithTitle:[cod objectAtIndex:i]];
}
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"None"];
[actionSheet showInView:[UIApplication sharedApplication].keyWindow];

3 个答案:

答案 0 :(得分:6)

试试这个:

[actionSheet showInView:[UIApplication sharedApplication].keyWindow.rootViewController.view];

看起来您无法直接在UIWindow s上显示操作表,您必须将它们呈现在由视图控制器管理的实际视图上,因此根视图控制器的视图非常适用于此

我认为这与UIActionSheet被弃用的事实关系不大(如果你需要支持iOS 7,你不能只是神奇地切换到UIAlertController),还有更多在底层实现中处理它们的表示的方式 - 我猜它现在依赖于具有视图控制器的表单的视图,这对于Windows来说是不正确的。

编辑:如果在根视图控制器的顶部有一个模态显示的视图控制器,这显然不起作用,因为根视图控制器的视图不再可见。您需要在当前可见的视图中显示工作表,例如当前视图控制器的视图(self.view)。

答案 1 :(得分:0)

我敢打赌,这与iOS 8中不推荐使用UIActionSheet有关。您应该使用UIAlertController代替preferredStyle UIAlertControllerStyleActionSheet

尝试使用它,看看它是否有效。你必须使用块而不是方法,但这不应该太难。

答案 2 :(得分:0)

根据Apple的Human Interface Guidelines about Temporary Views,只有在显示操作表的视图是弹出窗口时才会使用取消按钮,因为根据HIG,用户可以在弹出窗口外点击以关闭操作表。 / p>

因此,取消按钮在iPad上不起作用。

UIActionSheet也已被弃用,您应该使用UIAlertController代替。