SwiftUI 如何更改导航栏标题并从子窗体添加按钮



>我有一个主视图,它有 2 个选项卡。我将导航视图放在母版页上,以便可以在子视图中访问其功能。但是,标题永远不会成功分配给主控视图。

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

这是代码。您能否帮助我从子视图更改标题并从子视图向导航视图添加一个按钮?

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")
})
}
}

为了获得正确的导航功能,视图堆栈中应该只有一个NavigationView。我假设您只需要删除第一个NavigationView,因为您的MainViewTabView容器

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

至少对我来说,这种变体提供了原生的外观和感觉。

我从主视图中删除了导航视图,并在新结构导航选项卡的帮助下将导航视图添加到子视图中。

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)

我通过在多个选项卡中复制抽屉打开按钮并分配相同的"isDrawerOpen"变量来解决在导航视图上添加按钮的初始问题。

但是在这个过程中我仍然有一个用例,我需要向 NavView.尾随添加一个按钮以进行提交。有没有办法在子视图中添加按钮(例如,仪表板视图调用另一个视图(?

最新更新