【发布时间】:2021-09-13 10:58:26
【问题描述】:
我正在尝试将不同的toolbars 添加到我的每个选项卡,但它们没有显示。该应用程序将主要在横向 iPad 上使用,我可以将工具栏添加到 TabView 本身并显示它们,但是我不知道如何将按钮按下导航堆栈传递给各个视图/视图模型本地处理。
我尝试添加新的NavigationViews(包括.stacknavigationViewStyles),但这仍然只是在视图中添加了另一列。
这是一些准系统,工作代码:
import SwiftUI
@main
struct NavTabTestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
var body: some View {
MasterView()
}
}
struct MasterView: View {
var body: some View {
NavigationView {
List {
ForEach(0..<20) { index in
NavigationLink(
destination: DetailView(index: index)
.navigationTitle("Row \(index)")
) {
Text("\(index) th row")
}.tag(index)
}
}.navigationTitle(Text("Ratty"))
}
}
}
struct DetailView: View {
var index: Int
@State var selectedTab = 1
var body: some View {
TabView(selection: $selectedTab) {
Tab1(index: index).tabItem { Label("Tab1", systemImage: "list.dash") }
Tab2(index: index).tabItem { Label("Tab2", systemImage: "aqi.medium") }
Tab3(index: index).tabItem { Label("Tab3", systemImage: "move.3d") }
}
}
}
struct Tab1: View {
var index: Int
var body: some View {
Text("This is \(index) in tab 1")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Bingo") { print("Bingo") }
}
}
}
}
struct Tab2: View {
var index: Int
var body: some View {
Text("This is \(index) in tab 2")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Bongo") { print("Bongo") }
}
}
}
}
struct Tab3: View {
var index: Int
var body: some View {
Text("This is \(index) in tab 3")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Banjo") { print("Banjo") }
}
}
}
}
我开始怀疑这是否可能,以及在每个选项卡顶部使用按钮实现我自己的视图是否会更好。
编辑:
【问题讨论】:
-
NavigationView 应该是 TabView 的子项,而不是您所做的其他方式。导航到 DetailsView 是否重要?您可以呈现它并为每个选项卡视图添加一个 NavgationView?
-
@mahan - 我尝试将 NavigationView 移动到 List 中,但我的视图变得毫无意义。我不明白我可以把它放在哪里。另外,我没有绑定到 NavigationLink,但是当从列表中选择某些内容时,我将如何填充 Detail 视图?
标签: swiftui toolbar navigationview tabview