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

在UIAlertController中的操作下方显示空格