40代からのフリーランス

Ruby on RailsとiOS(Swift、Objective-C)でスタートアップのサービス開発を支援しています。

iOSでサーチコントローラーを使ってたら、アラートが表示されずに困った件

お仕事でSwift書いてます。

ちょっとハマったので、備忘録に。

 

今回は小難しい話なので、

プログラミングする人以外は意味がわからないと思います。

 

UIAlertControllerを生成して、presentしました。

通常の状態ならこれで出ます。

 

let alert = UIAlertController(title: title, message: title, preferredStyle: .alert)

present(alert, animated: true, completion: nil)

 

ところが、今回試してみると、なぜか出てこない。

デバッグウィンドウにはこんなメッセージが出ています。

 

the navigation controller containing the presented search controller (<UISearchController: 0x10d002e00>) must have definesPresentationContext set to YES. 

 

設定しましたが、変化なし。

もう一個何か出ています。

 

Warning: Attempt to present <UIAlertController: 0x10509d000> on <xxxxxController: 0x10c2226d0> which is already presenting (null)

 

 メッセージを解釈すると、すでにpresentしている奴がいるとのこと。

と言われても、他に何も出していませんけど・・・?


サーチコントローラーを使って検索した状態でアラートを

出そうとすると問題が発生する

試しにこうやってみた。

searchController.present(alert, animated: true, completion: nil)

ビンゴ!

アラートが出ました。


ところが今度は

検索した状態じゃない場合にアラートが出ない。

(そりゃそうなる気がする)


最終的にこんな感じにしておきました。

if searchController.isActive {
  searchController.present(alert, animated: true, completion: nil)
} else {
  present(alert, animated: true, completion: nil)
}