.alert

付ける位置

1. 基本は最上位のView(Container)に付ける

VStackZStackListなどの一番外側の親Viewに付けるのが最も管理しやすく、推奨される書き方です。
アラートは画面全体を覆うレイヤーとして表示されるため、個別のパーツ(Buttonなど)に付ける必要はありません。 

2. 複数のアラートを表示したい場合

同じView内で複数のアラートを使い分けたい場合は、以下の点に注意してください。

  • 同じViewに複数の.alertを並べない: SwiftUIの仕様上、同じ階層に並べると最後の一つしか動作しない場合があります。
  • Enum(列挙型)で管理する: 表示したいアラートの種類をEnumで定義し、一つの.alert内で内容を切り替えるのがスマートです。
  • 階層を分ける: どうしても複数を記述したい場合は、それぞれを異なるButtonSectionなどの別々のView階層に付与します。

3. バグを避けるための注意点

  • Listの中で回さないForEachListの「各セル(行)」に.alertを付けると、パフォーマンスが低下したり、正しく表示されなかったりするバグの原因になります。必ずListの外側に記述してください。
  • NavigationView(NavigationStack)の外側: 画面遷移を伴う場合、NavigationStack内側のコンテンツに付けるようにします。

List内に配置して直下のテキストボックスがすぐ閉じられるバグに遭遇した。
Listの再描写には注意。

使い方の例(簡単な構文)

isPresentedにBool型変数をセットする、ボタン等でその変数の値が変わったときにポップアップされる。

ユーザーに入力させたい時&入力制限

TextFieldが設置可能

条件分岐等で複数出したい時

Bool変数を複数使う

Toggle 使用時 Bool の片方だけの値で alert を出したい時

true false 両方で alert は反応するので onChange を挟む

コメント

タイトルとURLをコピーしました