在iOS 8.0中,苹果推出了UIAlertController以取代UIActionSheet.不幸的是,苹果没有添加任何关于如何展示它的信息.我在哈耶克的博客上找到了一个关于它的entry,然而,它在iPad上似乎不起作用.这种观点完全是错误的:

放错位置: 放错位置的图像

更正: 在此处输入图像描述

我使用以下代码在界面上显示它:

    let alert = UIAlertController()
    // setting buttons
    self.presentModalViewController(alert, animated: true)

有没有其他方法可以把它添加到iPad上?或者苹果只是忘记了iPad,或者还没有实现?

推荐答案

您可以使用UIPopoverPresentationController从弹出窗口显示UIAlertController.

在Obj-C中:

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];

编辑SWIFT 4.2,虽然有很多博客可以提供相同的内容,但去搜索它们可能会节省您的时间.

if let popoverController = yourAlert.popoverPresentationController {
    popoverController.sourceView = self.view //to set the source of your alert
    popoverController.sourceRect = CGRect(x: self.view.bounds.midX, y: self.view.bounds.midY, width: 0, height: 0) // you can set this as per your requirement.
    popoverController.permittedArrowDirections = [] //to hide the arrow of any particular direction
}

Ios相关问答推荐

无法结合 UIImageView 旋转动画和 tableView 部分重新加载

async/await、Task 和 [weak self]

将视图(例如 Text())不透明度设置为 0 或将背景设置为 Color.clear 会导致它不被绘制

SwiftUI NavigationView navigationBarTitle LayoutConstraints 问题

iOS 部署目标“IPHONEOS_DEPLOYMENT_TARGET”设置为 8.0,在 Flutter 中如何更改最小 IOS 部署目标

SwiftUI 应用生命周期 iOS14 AppDelegate 代码放哪里?

SwiftUI 无法在 HStack 的 Spacer 中点击

-1103 错误域=NSURLErrorDomain 代码=-1103“资源超过最大大小”iOS 13

文本未包含在 swift UI 中

Swift 默认的 AlertViewController 打破约束

Xcode 10.2.1 命令 PhaseScriptExecution 失败,退出代码为非零

没有为团队找到具有 iTunes Connect 访问权限的帐户

Flutter:如何创建一个新项目

如何使用 Xcode 创建 .ipa 文件?

由于 NSInvalidUnarchiveOperationException 导致 iOS11 WKWebview 崩溃

UIView 中的 safeAreaInsets 在 iPhone X 上为 0

CredStore 执行查询错误

错误 ITMS-90717:“无效的 App Store 图标”

在 iPhone X 模拟器的顶部和底部看到黑条

在您的项目中找不到有效的 GoogleService-Info.plist