登录后更新TabView并移至主视图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了登录后更新TabView并移至主视图相关的知识,希望对你有一定的参考价值。
我在ContentView中有柔软的TabView。对于onAppear,它可以正常工作。但是,在用户从LoginView登录后,我也尝试重新加载选项卡并移到首页。
以下是ContentView的代码
// ContentView.swift
// Matjri
//
//
import SwiftUI
struct ContentView: View {
@ObservedObject var user = User()
var body: some View {
HStack{
if (user.tokenIsActive) {
TabView {
HomeView()
.tabItem {
VStack {
Image(systemName: "house")
Text("Home")
}
}.tag(0)
UserPostsView()
.tabItem {
VStack {
Image(systemName: "person.fill")
Text("Me")
}
}.tag(1)
NewPostView()
.tabItem {
VStack {
Image(systemName: "plus")
Text("Add")
}
}.tag(2)
SearchView()
.tabItem {
VStack{
Image(systemName: "magnifyingglass")
Text("Search")
}
}.tag(3)
}
} else {
TabView {
HomeView()
.tabItem {
VStack {
Image(systemName: "house")
Text("Home")
}
}.tag(0)
LoginView()
.tabItem {
VStack {
Image(systemName: "person.fill")
Text("Me")
}
}.tag(1)
SearchView()
.tabItem{
VStack{
Image(systemName: "magnifyingglass")
Text("Search")
}
}.tag(2)
}
}
}
.onAppear() {
self.checkLoginValidity()
}
}
func checkLoginValidity() {
let userLogged = UserDefaults.standard.object(forKey: "userIsLogged") as? Bool ?? false
if (userLogged) {
let existinLogin = UserDefaults.standard.object(forKey: "loginExpiry") as! Date
if (existinLogin > Date().addingTimeInterval(86400 * 2)){
self.user.tokenIsActive = true
} else {
self.user.tokenIsActive = false
}
} else {
self.user.tokenIsActive = false
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
[当用户从LoginView登录时,我将tokenIsActive设置为true
struct LoginView: View {
@ObservedObject var user = User()
........
//Login successful
self.user.tokenIsActive = true
TabView没有更新。如何实现此目标,并在登录后将用户移至家庭视图。
答案
User()
和ContentView
中使用了不同的LoginView
实例。这是一个解决方案:
struct LoginView: View {
@ObservedObject var user: User // << only declare
和这里
LoginView(user: self.user) // << inject own user instance
.tabItem {
VStack {
Image(systemName: "person.fill")
Text("Me")
}
}.tag(1)
以上是关于登录后更新TabView并移至主视图的主要内容,如果未能解决你的问题,请参考以下文章
切换选项卡时删除所有子视图控制器并移至父视图控制器 IOS 目标 c