SwiftUI如何更改NavigationBarTitle并从子窗体中添加按钮

问题描述 投票:0回答:2

我有一个包含2个标签的主视图。我将navigationView放在母版页上,以便可以在子视图中访问其功能。但是,标题从未成功分配给主视图。

第二个目标是从子视图的导航按钮上添加一个按钮。但是,该窗体不会呈现它。

这里是代码。您能帮我从子视图中更改标题并从子视图中向NavigationView添加按钮吗?

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView{
            MainView()
                .navigationBarTitle(Text("App Title"), displayMode: .inline)
        }

    }
}

struct MainView: View {
    var body: some View {
        TabView(){

                DashboardView() 
                .navigationBarTitle(Text("Dashboard"), displayMode: .inline)
                .tabItem{
                    //Image(systemName: "list.dash")
                    Image(systemName: "chart.pie")
                    Text("Dashboard")
            }.tag(0)


                AssignmentView() 
                .navigationBarTitle(Text("Assignments"), displayMode: .inline)

                .tabItem{
                    Image(systemName: "briefcase")
                    Text("Assignments")
            }.tag(1)


        }

    }
}

struct DashboardView: View {
    var body: some View {
        Text("Dashboard View")
            .navigationBarTitle(Text("Dashboard View Title"), displayMode: .inline)

    }
}

struct AssignmentView: View {
    var body: some View {
        Text("Assignment View")
            .navigationBarTitle(Text("Assignments View Title"), displayMode: .inline)
            .navigationBarItems(trailing: Button(action: {
                print("Dashboard button click")
            }) {
                Text("Submit")
            })
    }
}
swiftui swift5 xcode11 navigationview
2个回答
0
投票

为了使导航功能正常工作,视图堆栈中应该只有一个NavigationView。我认为您只需要先删除NavigationView,因为您的MainViewTabView容器

struct ContentView: View {
    var body: some View {
        MainView()
    }
}

至少对我来说,这样的变体给人以自然的外观。


0
投票

我从MainView中移除了NavView,并在新结构NavigationTab的帮助下将NavViews添加到了子视图中。

struct NavigationTab<Title,   Content>: View where Title: StringProtocol,  Content: View {
    var title: Title
    var content: () -> Content

    var body: some View {
        NavigationView {
            content()
                .navigationBarTitle(Text(title), displayMode: .inline)

        }
    }
}

选项卡项目现在看起来像

NavigationTab(title: "Dashboard" ) {
                    DashboardView()
                        .navigationBarItems(leading: Button(action: {
                            self.isDrawerOpen.toggle()
                        }) {
                            Image(systemName: "sidebar.left")
                        })
                }

                .tabItem{
                    Image(systemName: "chart.pie")
                    Text("Dashboard")
                }.tag(1)

我通过在多个选项卡中复制DrawerOpen Button并分配相同的“ isDrawerOpen”变量,解决了在NavView上添加按钮的最初问题。

但是我在过程中仍然有一个用例,需要在NavView.trailing中添加一个按钮以进行提交。是否可以在子视图中添加按钮(例如DashboardView调用另一个视图)?

© www.soinside.com 2019 - 2024. All rights reserved.