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 中显示的主要内容,如果未能解决你的问题,请参考以下文章
iOS 8 之后,还能继续使用 UIActionSheet 和 UIAlertView 吗?
iOS 8 在 UIActionSheet 中破坏了 UIPickerView
iOS 8 中 UIAlertView 和 UIActionSheet 河里去了?