swiftUIでのアクションシートの実装~備忘録~

iphoneを利用していればよく使う以下のアクションシートの簡単な実装の備忘録です。

いちいち一から実装する事はなく、swift側が便利なツールを用意してくれています。
![スクリーンショット 2021-06-14 18.55.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/826735/aae403ec-d1ec-1778-827f-4475669e6b73.png)



利用するコード

・actionSheet()
・actionSheetのモディファイアであるActionsheet()
・BUtton()
・dufault()
・cancel()
・destrcutive()

#全体コード

```swift
//
//  ContentView.swift
//  Shared
//
//

import SwiftUI

struct ContentView: View {
    @State var isSheet: Bool = false
    var body: some View {
        Button(action: {
            isSheet = true
        }) {
            Text("アクションシートテスト")
        }.actionSheet(isPresented: $isSheet) {
            ActionSheet(title: Text("タイトル"),
            message: Text("メッセージ文"),
            buttons: [
                .default(Text("ボタン1"), action: {}),
                .default(Text("ボタン2"), action: {}),
                .destructive(Text("削除"), action:{}),
                .cancel(Text("キャンセル"), action: {})
            ])
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


```


#Buttonでアクション設定をする。
ライブラリパネルのButtonを使い、アクションとテキストを設定します。


```swift
 Button(action: {
            isSheet = true
        }) {
            Text("アクションシートテスト")

```

クリック可能なボタンができます。
ボタンをクリックするとisSheetにtrueが代入されます。
Textには"アクションシートテキスト"を設定します。

![スクリーンショット 2021-06-14 20.05.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/826735/38dc6314-5e86-ea34-1c0c-c049789c6924.png)


#アクションシートを表示するコードを追加する。

actionSheetモディファイアを利用し、引数にユーザーが定義した変数であるisSheetを設定します。Buttonのaction実行時にisSheetがtrueなので、ActionSheetが実行されアクションシートが表示されます。
titleにはタイトル、messageにはメッセージを設定します。
buttons:に必要なボタンを設定すれば完了です。
ボタンに応じて処理を行いたければaction:{}の中に記載すれば良いです。


```swift
.actionSheet(isPresented: $isSheet) {
            ActionSheet(title: Text("タイトル"),
            message: Text("メッセージ文"),
            buttons: [
                .default(Text("ボタン1"), action: {}),
                .default(Text("ボタン2"), action: {}),
                .destructive(Text("削除"), action:{}),
                .cancel(Text("キャンセル"), action: {})
            ])
        }

```

![スクリーンショット 2021-06-14 18.55.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/826735/c6f045e8-6139-6afe-baf0-12016d4199f9.png)

buttons:で設定したいボタンの種類を簡単に設定することができます。
``.default``であれば通常の青いボタン、``destructive``
であれば赤いボタン　``cancel``であれば独立したキャンセルボタンが設定されます。

```swift
buttons: [
                .default(Text("ボタン1"), action: {}),
                .default(Text("ボタン2"), action: {}),
                .destructive(Text("削除"), action:{}),
                .cancel(Text("キャンセル"), action: {})
            ])

```

#おまけ削除を確認するアクションシート
※デリート処理は書きませんので自身の制作したいもによって書き換えます。

```swift
//
//  ContentView.swift
//  Shared
//
//  
//

import SwiftUI

struct ContentView: View {
    @State var isSheet: Bool = false
    var body: some View {
        Button(action: {
            isSheet = true
        }){
            Text("削除")
                .foregroundColor(.white)
                //カプセル型のボタン
                .background(Capsule()
                .foregroundColor(.red)
                .frame(width: 100,height: 30))
        }.actionSheet(isPresented: $isSheet){
            ActionSheet(title: Text("削除しますか?"),
                        buttons:[
                            .destructive(Text("削除"), action:{
                                deleteProcess()
                            }),
                            .cancel(Text("キャンセル"),action:{})
                        ]
            )
        }
    }
}
func deleteProcess(){
    print("削除しました。")
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

```



![スクリーンショット 2021-06-14 20.45.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/826735/f243704b-c53f-4c63-7813-b98fe105e3cb.png)


![スクリーンショット 2021-06-14 20.45.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/826735/e33d6eed-3a15-8edb-b478-7203504f2618.png)


以上です。