1. ホーム
  2. アイオス

[解決済み】UIAlertControllerをビューコントローラーでない時に表示するには?

2022-04-16 06:44:54

質問

シナリオ ユーザーがビューコントローラのボタンをタップした。ビューコントローラは、ナビゲーションスタックの一番上にある(当然)。タップは、別のクラスで呼び出されるユーティリティクラスのメソッドを呼び出します。そこで悪いことが起こり、制御がビューコントローラに戻る前に、その場で警告を表示したい。

+ (void)myUtilityMethod {
    // do stuff
    // something bad happened, display an alert.
}

で可能でした。 UIAlertView (ただし、おそらく適切ではない)。

この場合、どのように提示するかというと UIAlertController で、その場で myUtilityMethod ?

解決方法は?

を投稿しました。 類似の質問 数ヶ月前、この問題を解決することができました。コードを見るだけなら、私の投稿の一番下にあるリンクをたどってください。

解決策は、追加のUIWindowを使用することです。

UIAlertControllerを表示させたい場合。

  1. 自分のウィンドウをキーウィンドウ、可視ウィンドウにする( window.makeKeyAndVisible() )
  2. 新しいウィンドウのルートViewControllerとして、プレーンなUIViewControllerのインスタンスを使用するだけです。( window.rootViewController = UIViewController() )
  3. UIAlertControllerをウィンドウのrootViewControllerに表示します。

2つほど注意点があります。

  • UIWindowは強く参照されている必要があります。強く参照されていない場合は、決して表示されません(リリースされるため)。プロパティを使用することをお勧めします。 関連オブジェクト .
  • ウィンドウが他のすべて(システムUIAlertControllersを含む)の上に表示されるようにするために、windowLevelを設定しました。( window.windowLevel = UIWindowLevelAlert + 1 )

最後に、完成した実装がありますので、それだけをご覧になりたい方はどうぞ。

https://github.com/dbettermann/DBAlertController