在运行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];
答案 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
代替。