Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【SwiftUI】モーダルビューを実装する

 

はじめに

モーダルビューを実装する手順をまとめました。

 

開発環境

 

本題

手順

モーダルビューを実装するファイルを追加

"File" > "New" > "File..."と選択していく。

f:id:hfoasi8fje3:20210309220234p:plain

 

"SwiftUI View"を選択。

f:id:hfoasi8fje3:20210309220426p:plain

 

ファイル名を"ModalView"として、"Create"を選択。

f:id:hfoasi8fje3:20210309220600p:plain

 

Textの内容を変更しておく。

ModalView.swift

f:id:hfoasi8fje3:20210309220939p:plain

 

モーダルビューを呼び出す

ContentView.swiftを開いて、Textを削除。

ContentView.swift

f:id:hfoasi8fje3:20201218183041p:plain

 

画面右上の"+"を選択。

f:id:hfoasi8fje3:20201218183254p:plain

 

"Button"を選択。

f:id:hfoasi8fje3:20210309221608p:plain

 

コードが挿入される。

ContentView.swift

f:id:hfoasi8fje3:20210309221705p:plain

 

Textを追加することでButtonに表示する文字列を指定。

ModalViewの表示状態を管理する変数isModalActiveを追加。

Buttonを選択した時にisModalActiveをtrueに変更する。

ContentView.swift

f:id:hfoasi8fje3:20210309223948p:plain

 

isModalActiveがtrueの場合にModalViewを表示する実装を追加。

ContentView.swift

f:id:hfoasi8fje3:20210309224137p:plain


モーダルビューに閉じるボタンを追加

Environment property wrapperを使った変数とButtonを追加。

ModalView.swift

f:id:hfoasi8fje3:20210309225857p:plain


※@Bindingを使っても閉じる動作を実装できる。その場合はContentView.swift側の実装も修正が必要。

ModalView.swift

f:id:hfoasi8fje3:20210309230527p:plain

 

ContentView.swift

f:id:hfoasi8fje3:20210309230628p:plain


全体のコード

※Environment property wrapperを使ってモーダルビューを閉じるパターンの実装を記載しています。@Bindingを使うパターンの実装については「手順」欄を参考にしてください。
ContentView.swift

import SwiftUI

struct ContentView: View {
    @State var isModalActive = false
    
    var body: some View {
        Button(action: {
            self.isModalActive.toggle()
        }) {
            Text("モーダルビューを表示する")
        }
        .sheet(isPresented: $isModalActive) {
            ModalView()
        }
    }
}

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

 

ModalView.swift

import SwiftUI

struct ModalView: View {
    @Environment(\.presentationMode) var presentation
    
    var body: some View {
        Text("モーダルビューが表示されています")
            .padding()
        
        Button(action: {
            self.presentation.wrappedValue.dismiss()
        }, label: {
            Text("閉じる")
        })
    }
}

struct ModalView_Previews: PreviewProvider {
    static var previews: some View {
        ModalView()
    }
}

 

おわりに

実装の復習として、今後もSwiftUIの基本的な実装手順を記事に残していこうと思います。

 

※2021/03/23 追記

モーダルビューを全画面で表示する方法について記事にしました。

【SwiftUI】モーダルビューを全画面表示にする - Swift・iOS

 

参考