LoginSignup
ioli
@ioli (いおり)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

TabViewにおける画面更新のやり方

Q&AClosed

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

No Answers yet.

Your answer might help someone💌