swiftui navigationview弹出到根目录并以编程方式加载新视图
在我的应用程序中,我希望通过编程方式从tabbar页面打开聊天页面。我正在尝试更改选择并安装它。如果聊天热线出现在屏幕上,则它工作正常并加载。 但是,如果聊天行位于较低的行中(例如,如果在第100行中),则不会加载。它需要向下滚动并显示为加载状态。我们如何解决这个问题,如何加载聊天页面swiftui navigationview弹出到根目录并以编程方式加载新视图,swiftui,swiftui-list,swiftui-navigationlink,swiftui-navigationview,swiftui-foreach,Swiftui,Swiftui List,Swiftui Navigationlink,Swiftui Navigationview,Swiftui Foreach,在我的应用程序中,我希望通过编程方式从tabbar页面打开聊天页面。我正在尝试更改选择并安装它。如果聊天热线出现在屏幕上,则它工作正常并加载。 但是,如果聊天行位于较低的行中(例如,如果在第100行中),则不会加载。它需要向下滚动并显示为加载状态。我们如何解决这个问题,如何加载聊天页面 struct TabPage: View { @State private var selectedItemIndex : Int = 2 @State var conversNavLink: S
struct TabPage: View {
@State private var selectedItemIndex : Int = 2
@State var conversNavLink: String? = nil
@State var isActive1: Bool = false
var body: some View {
ZStack{
NavigationView{
VStack(spacing:0) {
switch selectedItemIndex {
case 0: Shop()
case 1: ConversationsView(conversNavLink: $conversNavLink)
case 2: GameHome(isActiveNavLink: $isActive1)
default: Shop()
}
Tabbar(selectedItemIndex: $selectedItemIndex)
}
}
}
.navigationBarHidden(true)
.navigationViewStyle(StackNavigationViewStyle())
.onReceive(NotificationCenter.default.publisher(for: NSNotification.loadChatWithID)){ obj in
if let userInfo = obj.userInfo, let id = userInfo["id"] as? String {
isActive1 = false
selectedItemIndex = 1
conversNavLink = id
}
}
}
}
struct ConversationsView: View {
@EnvironmentObject var manager : ConversationsManager
@EnvironmentObject var um : UserManager
@Binding var conversNavLink: String?
var body: some View {
ZStack{
VStack(spacing:0){
navBar()
ScrollView {
LazyVStack(spacing:0) {
ForEach(manager.convers.sorted(by: { $0.messages.last?.sentDate ?? Date() > $1.messages.last?.sentDate ?? Date()}), id: \.conversID) { convers in
NavigationLink(destination:ChatPage(privateSetting:(um.getUser(curUserID).privateSetting!)).environmentObject(convers), tag: convers.conversID, selection: $conversNavLink) {
ConversationCell(isSelected: self.selections.contains{ $0.conversID == convers.conversID }, isEditing: isEditing){
}
}
}
}
}
}
}
}
}
struct GameHome: View {
@Binding var isActive1: Bool
var body: some View {
ZStack{
NavigationLink(destination: Sub1($isActive1), isActive: $isActive1) {
Text("load sub 1")
}
}
}
}
struct Sub1: View {
@Binding var isActive1: Bool
var body: some View {
ZStack{
NavigationLink(destination: Sub2($isActive1), isActive: $isActive1) {
Text("load sub 2")
}
}
}
}
struct Sub2: View {
@Binding var isActive1: Bool
var body: some View {
ZStack{
BUtton({
NotificationCenter.default.post(name: NSNotification.loadChatWithID,
object: nil, userInfo: ["id": chatID])
}){
Text("load chat with id")
}
}
}
}