質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

解決済

1回答

3260閲覧

【SwiftUI 】sheetのスワイプによる閉じると、ボタンによる閉じるで異なる動作を行いたい

Chiaki1111

総合スコア15

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

0クリップ

投稿2020/05/16 06:54

前提・実現したいこと

sheetのスワイプによる「閉じる」と、sheet内のボタンクリック(自分で設定)による「閉じる」で異なる動作を行いたいです。
sheetのonDismissで閉じるときの動作を設定すると、上記の両方に対して反映されてしまいました。
片方だけ(sheetのスワイプのみ)に閉じるときの動作を設定したい場合どのようにすればよろしいでしょうか。
ご教示ください。

該当のソースコード

このような場合に、View1に記載したonDismiss内の動作xxxが、スワイプで閉じたときにも、Bottonを押してtoggle()し、閉じた時にも影響してしまいました。
スワイプで閉じたときだけ反映させるにはどうしたら良いでしょうか。

swiftUI

1【View1】 2 3... 4 5.sheet(isPresented: self.$show, onDismiss: {xxx}, content: { 6 View2(show: self.$show) 7 }) 8... 9 10 11【View2】 12 13struct View2 : View { 14 @Binding var show: show 15 16... 17 18 Button (action: { 19 yyy 20 self.show.toggle() 21 22 }){Text("作成")} 23 24... 25 26 27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一番手早いのは単純にもう1つ状態変数持つことですかねー

import SwiftUI struct ContentView: View { @State var showingModal = false @State var isTappedButton = false var body: some View { Button(action: { self.showingModal = true self.isTappedButton = false }) { Text("Show Modal") } .sheet(isPresented: $showingModal, onDismiss: { if self.isTappedButton { print("ボタンを押して閉じた時の処理") } else { print("スワイプなどで閉じた時の処理") } }) { SecondView(showingModal: self.$showingModal, isTappedButton: self.$isTappedButton) } } } struct SecondView : View { @Binding var showingModal:Bool @Binding var isTappedButton: Bool var body: some View { Button(action: { self.showingModal = false self.isTappedButton = true }) { Text("Dismiss") } } }

投稿2020/05/17 00:08

TakuyaAso

総合スコア1361

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chiaki1111

2020/05/17 03:21

onDismissの中でもif文で条件つければいいのですね、ありがとうございます。 出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問