UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?
Posted
技术标签:
【中文标题】UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?【英文标题】:UIPickerView in UIAlertController give error in iPad only while correct in iPhone? 【发布时间】:2015-10-29 12:51:44 【问题描述】:我将以下代码用于警报视图,它适用于 iPhone。但是当我在 iPad 上运行它时,会出现以下错误:
由于未捕获的异常“NSGenericException”而终止应用程序,原因:“您的应用程序已呈现样式为 UIAlertControllerStyleActionSheet 的 UIAlertController ()。具有此样式的 UIAlertController 的 modalPresentationStyle 是 UIModalPresentationPopover。您必须通过警报控制器的 popoverPresentationController 提供此弹出窗口的位置信息。您必须提供 sourceView 和 sourceRect 或 barButtonItem。如果在您呈现警报控制器时不知道此信息,您可以在 UIPopoverPresentationControllerDelegate 方法 -prepareForPopoverPresentation 中提供它。'
警报视图代码如下:
let alertView = UIAlertController(title: "Select Launguage", message: "\n\n\n\n\n\n\n\n\n\n", preferredStyle: UIAlertControllerStyle.ActionSheet);
pickerView.center.x = self.view.center.x
alertView.view.addSubview(pickerView)
let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)
alertView.addAction(action)
presentViewController(alertView, animated: true, completion: nil)
请帮助我。为什么它不能在 iPad 上运行...
【问题讨论】:
看这里你需要做什么:***.com/questions/24224916/… 我以前试过那个。但仅适用于 iPad。不能在 iPhone 上工作。 【参考方案1】:在 iPad 上,警报将使用 UIPopoverPresentationController 显示为弹出框,它要求您为弹出框的呈现指定一个锚点。
UIViewController *self; // code assumes you're in a view controller
UIButton *button; // the button you want to show the popup sheet from
UIAlertController *alertController;
UIAlertAction *destroyAction;
UIAlertAction *otherAction;
alertController = [UIAlertController alertControllerWithTitle:nil
message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
destroyAction = [UIAlertAction actionWithTitle:@"Remove All Data"
style:UIAlertActionStyleDestructive
handler:^(UIAlertAction *action)
// do destructive stuff here
];
otherAction = [UIAlertAction actionWithTitle:@"Blah"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
// do something here
];
// note: you can control the order buttons are shown, unlike UIActionSheet
[alertController addAction:destroyAction];
[alertController addAction:otherAction];
[alertController setModalPresentationStyle:UIModalPresentationPopover];
UIPopoverPresentationController *popPresenter = [alertController
popoverPresentationController];
popPresenter.sourceView = button;
popPresenter.sourceRect = button.bounds;
[self presentViewController:alertController animated:YES completion:nil];
【讨论】:
以上是关于UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 中的 UIAlertController 返回 nil
在 UIAlertController 中的 UIAlertAction 中将图像居中
UIAlertController中的多行可编辑文本UITextview?
UIAlertController 或 UITextField 中的 UILabel 类似 UILabel
TextfieldShouldBeginediting Objective-c 中的 UIAlertcontroller