UIActionSheet 未在 iOS 8 中显示

Posted

技术标签:

【中文标题】UIActionSheet 未在 iOS 8 中显示【英文标题】:UIActionSheet not showing in iOS 8 【发布时间】:2014-09-26 14:27:28 【问题描述】:

我可以在 ios 7 中显示 actionSheet,但在 iOS 8 环境中无法显示。有什么方法可以追踪吗?

  UIActionSheet *_actionSheet = [[UIActionSheet alloc] initWithTitle:@"Account"
                                                               delegate:self 
                                                      cancelButtonTitle:@"Close" 
                                                 destructiveButtonTitle:@"Log Out" 
                                                      otherButtonTitles:@"View Account", nil];

    [_actionSheet showInView:appDel.window];

【问题讨论】:

这是因为UIActionSheets 不再存在于iOS8 中,它们已被弃用,取而代之的是UIAlertController 阅读developer.apple.com/Library/ios/documentation/UIKit/Reference/… @Popeye "deprecated" 并不意味着“消除”,而是“请避免”。它应该仍然可以工作 在我的 iPhone 应用程序中,不,它不再工作了。在 iOS 9 中,我的 UIActionSheet 现在只是使整个屏幕变暗,并且不会出现任何弹出菜单。我在这里修复的详细信息:***.com/questions/32824199/…(叹息...) 【参考方案1】:

UIActionSheet 在 iOS 8 中已弃用。

要在 iOS 8 中创建和管理操作表,您应该使用 UIAlertController 和 UIAlertControllerStyleActionSheet 的首选样式。

请参阅此example。

【讨论】:

我也参考了这个页面,但我得到“你必须提供一个 sourceView 和 sourceRect 或一个 barButtonItem。如果在你展示警报控制器时这个信息是未知的,你可以提供它UIPopoverPresentationControllerDelegate 方法 -prepareForPopoverPresentation。”我参考了其他页面,但我被困在按钮部分。 ***.com/questions/24224916/…【参考方案2】:
UIAlertController * alert=   [UIAlertController
                             alertControllerWithTitle:@"Info"
                             message:@"You are using UIAlertController"
                             preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* ok = [UIAlertAction
                    actionWithTitle:@"OK"
                    style:UIAlertActionStyleDefault
                    handler:^(UIAlertAction * action)
                    
                        [alert dismissViewControllerAnimated:YES completion:nil];

                    ];
UIAlertAction* cancel = [UIAlertAction
                        actionWithTitle:@"Cancel"
                       style:UIAlertActionStyleDefault
                       handler:^(UIAlertAction * action)
                       
                           [alert dismissViewControllerAnimated:YES completion:nil];

                       ];

 [alert addAction:ok];
 [alert addAction:cancel];

 [self presentViewController:alert animated:YES completion:nil];

【讨论】:

【参考方案3】:

这显然是 iOS 8 的回归。我已提交 rdar,请也提交。

与此同时,您可以使用类别或子类来修复它,您可以在其中检查视图是否为窗口,如果是,则在该窗口上获取 rootViewController 的视图并使用它。它会这样工作。

【讨论】:

【参考方案4】:

当 iOS 8 发布时,我遇到了操作表的问题。这可能是您呈现的视图存在问题。您可以在实际视图而不是窗口中显示它吗?我会先在那里进行实验,在最坏的情况下,将 show 方法封装在特定于 iOS 7 和 8 的东西中。我开始使用PSTAlertController 来管理我的警报和操作表。它支持 UIAlertView、UIActionSheet 和 UIAlertController。它会整理出使用哪一个,并让您可以访问按钮的阻止操作,同时仍支持 iOS 7 和 8。值得一看。

【讨论】:

【参考方案5】:

如果其他人看到此问题,则该问题实际上是由 iOS 8 和 9 将您的操作表显示在屏幕键盘后面引起的,因此您实际上看不到它。您只会看到屏幕的其余部分变暗。天才。

简单的解决方案是在显示您的UIActionSheet之前添加一行代码:

[self.view endEditing:true];

这会关闭屏幕键盘,让您漂亮的操作表再次可见。

【讨论】:

以上是关于UIActionSheet 未在 iOS 8 中显示的主要内容,如果未能解决你的问题,请参考以下文章

UIActionSheet iOS 8 错误

iOS 8 之后,还能继续使用 UIActionSheet 和 UIAlertView 吗?

iOS 8 在 UIActionSheet 中破坏了 UIPickerView

iOS 8 中 UIAlertView 和 UIActionSheet 河里去了?

带有 UIActionSheet IOS 8 的 UIPickerView 停止工作

iOS UIActionSheet的基本使用