【发布时间】:2020-05-23 10:53:32
【问题描述】:
我在 UserDefaults 中有一个布尔值来检查用户是否登录。 在我的第一页中,我有一个标题,当用户单击个人资料图片时,它会显示一个模式(使用 .sheet),并且在其中我有一个供用户注销的按钮。
当用户按下注销按钮并关闭模式时,如何更改视图?
或者在用户单击 LogOut 按钮并关闭模式以检查新的 Bool 值后,我如何重新加载主页?
struct Home: View {
var body: some View {
ScrollView {
VStack {
// MARK: Header
Header(title: "Home")
}
Spacer()
}
.padding(20)
}
}
struct Header: View {
public var title: String = ""
@State private var showProfile = false
var body: some View {
HStack {
// MARK: - User Profile
Image("profile")
.resizable()
.clipShape(Circle())
.frame(width: 50, height: 50)
.onTapGesture {
print("⚠️ Profile has been tapped.")
self.showProfile.toggle()
}
.sheet(isPresented: $showProfile) {
Account(showProfile: self.$showProfile)
}
}
}
}
struct Account: View {
@Binding var showProfile: Bool
var body: some View {
NavigationView {
// MARK: - Account Sections
List {
// MARK: - Log Out -
Section {
Button(action: {
print("❌ User has been logged out.")
self.showProfile.toggle()
}) {
Text("Log Out")
.bold()
.foregroundColor(.red)
}
}
}
// MARK: - NavigationBar Settings
.navigationBarTitle("Account", displayMode: .inline)
}
}
}
这是我的 UserDefault 类
class UsersSettings: ObservableObject {
@Published var isLoggedIn: Bool = UserDefaults.standard.bool(forKey: "isLogged") {
didSet {
UserDefaults.standard.set(self.isLoggedIn, forKey: "isLogged")
print(UserDefaults.standard.bool(forKey: "isLogged"))
}
}
}
【问题讨论】:
-
您有没有为此找到解决方案?我有一个类似的问题,当查看工作表然后关闭列表中包含项目的列表视图时,现在是空白的。所以我需要知道当工作表被关闭时如何强制 ListView 刷新?
-
@Learn2Code in this video,我注意到这个人做了我正在寻找的事情,在检查之后我注意到这个人使用了一个叫做“NotificationCenter”的东西,我也做了同样的事情,现在它正在工作为了我。您可以在here了解更多关于通知中心的信息