我有一个包含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")
})
}
}
为了使导航功能正常工作,视图堆栈中应该只有一个NavigationView
。我认为您只需要先删除NavigationView
,因为您的MainView
是TabView
容器
struct ContentView: View {
var body: some View {
MainView()
}
}
至少对我来说,这样的变体给人以自然的外观。
我从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调用另一个视图)?