前提・実現したいこと
xcodeでSwiftUIにて某カードゲームのダメージ計算アプリを作成しています.
発生している問題・エラーメッセージ
モーダル表示した画面でtoggleを操作すると,元の画面に戻った後でstepperを操作した場合,再度モーダル表示した画面が表示されてしまいます.
該当のソースコード
swift
1import SwiftUI 2 3 4final class ViewModel: ObservableObject { 5 @Published var opponentcondition = [false,false,false,false,false] 6 @Published var owncondition = [false,false,false,false,false] 7} 8 9struct ContentView: View { 10 @State private var opponentdamage = [0,0,0,0,0,0,0,0,0] 11 @State private var owndamage = [0,0,0,0,0,0,0,0,0] 12 @State private var showAlert = false 13 @State private var showcondition = false 14 @State private var coin = "表" 15 16 @ObservedObject var condition = ViewModel() 17 18 19 var body: some View { 20 NavigationView{ 21 Form { 22 Section(header: Text("相手のバトルポケモン")){ 23 Stepper(value: $opponentdamage[0], in: 0...990, step: 10){ 24 Text("(opponentdamage[0], specifier: "%d")") 25 } 26 } 27 Section(header: Text("相手のベンチポケモン")){ 28 Stepper(value: $opponentdamage[1], in: 0...990, step: 10){ 29 Text("(opponentdamage[1], specifier: "%d")") 30 //以下略 31 } 32 } 33 .toolbar{ 34 ToolbarItemGroup(placement: .navigationBarTrailing) { 35 Button("コイントス") { 36 let randomBool = Bool.random() 37 self.showAlert = true 38 39 if randomBool { 40 coin = "表" 41 } 42 else{ 43 coin = "裏" 44 } 45 } 46 Button("状態異常"){ 47 self.showcondition.toggle() 48 } 49 .sheet(isPresented: $showcondition){ 50 ConditionlistView(condition: self.condition) 51 } 52 } 53 } 54 .alert(isPresented: $showAlert) { 55 Alert( 56 title: Text("コイントス結果"), 57 message: Text(coin), 58 dismissButton: .default(Text("OK")) 59 ) 60 } 61 } 62 63 Form { 64 Section(header: Text("自分のバトルポケモン")){ 65 Stepper(value: $owndamage[0], in: 0...990, step: 10){ 66 Text("(owndamage[0], specifier: "%d")") 67 } 68 } 69 70 Section(header: Text("自分のベンチポケモン")){ 71 Stepper(value: $owndamage[1], in: 0...990, step: 10){ 72 Text("(owndamage[1], specifier: "%d")") 73 } 74 //以下略 75 } 76 } 77 } 78} 79 80struct ConditionlistView: View { 81 @ObservedObject var condition: ViewModel 82 83 var body: some View{ 84 Form{ 85 Section(header: Text("相手のバトルポケモン")){ 86 Toggle(isOn: $condition.opponentcondition[0]){ 87 Text("どく") 88 } 89 //以下略 90 } 91 Section(header: Text("自分のバトルポケモン")){ 92 Toggle(isOn: $condition.owncondition[0]){ 93 Text("どく") 94 } 95 //以下略 96 } 97 } 98 } 99} 100 101struct ContentView_Previews: PreviewProvider { 102 static var previews: some View { 103 ContentView() 104 } 105} 106
試したこと
初めてのiosアプリ開発なので,どう対処していいかわからず投稿させていただきました.
「swift モーダル 再表示される」「swift modal reappear」などで,検索はしてみましたが,私では解決策を見つけることができませんでした.
補足情報(FW/ツールのバージョンなど)
iMac bigsur 11.2.1
xcode 12.4
swift 5
アプリ画面の動画を以下のリンクに掲載しました.
https://d.kuku.lu/60e8c5be36
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。