1. ホーム
  2. アイオス

[解決済み】iOS 8を使用してiPadでUIAlertControllerを正しく表示する。

2022-04-13 13:31:11

質問

iOS 8.0では、Appleは UIAlertController を置き換えるために UIActionSheet . 残念ながら、Appleはそれをどのように提示するかについての情報を追加しませんでした。私が見つけたのは エントリ について、hayaGeekさんのブログで紹介されていますが、iPadでは動作しないようです。全く見当違いな表示になっています。

位置がずれている。

正しい。

私は以下のコードを使って、インターフェイスに表示しています。

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

iPad用に追加する他の方法はないのでしょうか?それともAppleはiPadを忘れてしまったのか、それともまだ実装されていないのか?

解決方法は?

を提示することができます。 UIAlertController を使用することで、ポップオーバーから UIPopoverPresentationController .

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
}