TabViewにおける画面更新のやり方
Q&A
Closed
SwiftUIで、TabViewにおける画面更新の方法がわからず、解決策を教えていただければと思い投稿させていただきました。
やりたいこと
TabViewの中にtest1,test2のViewがあります。
test1にはボタンが一つ用意されています。test2には「false」の文字があります。
test1のボタンを押すとtest2で画面更新が行われ文字が「true」に変わる。
問題点
test1のボタンを押しても、test2での画面更新が行われず、ずっと「false」のままになってしまっています。
プレビューの停止ボタンを押して、再び再生ボタンを押すとtest2の文字は「true」になるため、変数内での値はちゃんと変わっています。
そのため、test1で値が変わった時にtest2の画面の更新がされていないため、それを行うための方法をご教授いただければと思います。
ContentView
import SwiftUI
struct ContentView: View {
@ObservedObject var user = UserProfile()
var body: some View {
TabView{
test1View()
.tabItem {
Image(systemName: "1.circle")
}
test2View()
.tabItem {
Image(systemName: "2.circle")
}
}
}
}
test1View
struct test1View: View {
@ObservedObject var user = UserProfile()
var body: some View {
VStack{
Button(action: {
user.Toggle()
}) {
Text("Button1")
.font(.title2)
.fontWeight(.black)
.foregroundColor(Color.white)
.padding(.all)
.background(user.flag ? Color.gray.opacity(0.2) : Color.gray.opacity(0.7))
}
}
}
}
test2View
struct test2View: View {
@ObservedObject var user = UserProfile()
var body: some View {
VStack{
if user.flag {
Text("true")
}
else{
Text("false")
}
}
}
}
Store
flagは保存しておきたいのでUserDefaultsを使いました。
import Foundation
class UserProfile: ObservableObject {
@Published var flag : Bool
func Toggle(){
flag.toggle()
UserDefaults.standard.set(flag, forKey: "flag")
}
init() {
flag = UserDefaults.standard.bool(forKey: "flag")
}
}
SwiftUIを最近学習し始めた者のためとても初歩的な質問をしてしまっていると思いますが、どうかよろしくお願いいたいします。
0