iOS UIAlertController の落とし穴

UIAlertController の初期化時には、次の 2 つのpreferredStyles があります。

タイプ 1 UIAlertControllerStyleAlert

タイプ 2 UIAlertControllerStyleActionSheet

次の理由から、タイプ 1 を使用することをお勧めします。

1. 前者はiPhoneとiPadで表示形式が同じで画面中央にダイアログボックスがポップアップするタイプ、後者はiPhone、iPadともに画面下からダイアログボックスがポップアップするタイプです。 , 指定したsourceViewに基づいてダイアログボックスを表示します。「バブル」の形のダイアログボックスで、ボタンが多い場合は最初の1~2個のボタンだけが表示されます。

2. 最も重要なことは、2 番目のタイプは不適切に使用すると iPad でクラッシュするということです。

UIPopoverPresentationController *popOver = [alert popoverPresentationController];
    // 如果不加这两句,iPad点击混合UITableView页的条目时会崩溃
    // 遗留问题:如果UIAlertAction较多,显示不全
    popOver.sourceView = vc.view; //下拉式对话框 弹出的位置
    popOver.sourceRect = vc.view.bounds;

    // 如果不加这两句,iPad点击纯UITableView页的条目不弹出对话框
    // 遗留问题:如果UIAlertAction较多,显示不全
    popOver.barButtonItem = vc.navigationItem.leftBarButtonItem;
    popOver.permittedArrowDirections = UIPopoverArrowDirectionAny;

上記のコードは、 [vc presentViewController:alert anime: YES completed: nil ]; を実行する前に追加する必要があります。これはページのレイアウトにも関係します。たとえば、上記のコードのコメント: ページは非 UITableView (テストされていない)、純粋な UITableView、混合 UITableView (つまり、UITableView はページのレイアウトの一部にすぎません)この例では、UITableView の上にいくつかのボタンがあります)。

UIAlertController のpreferredStyle が UIAlertControllerStyleAlert に設定されている限り、これらのコードは破棄できます。

おすすめ

転載: blog.csdn.net/piggy514/article/details/132488744