我的TabView
设置如下:
struct ContentView: View {
@State private var selection = 0
@State var newListingPresented = false
var body: some View {
TabView(selection: $selection){
// Browse
BrowseView()
.tabItem {
VStack {
Image(systemName: (selection == 0 ? "square.grid.2x2.fill" : "square.grid.2x2"))
}
}
.tag(0)
// New Listing
NewListingView()
.tabItem {
VStack {
Image(systemName: (selection == 1 ? "plus.square.fill" : "plus.square"))
}
}
.tag(1)
// Bag
BagView()
.tabItem {
VStack {
Image(systemName: (selection == 2 ? "bag.fill" : "bag"))
}
}
.tag(2)
// Profile
ProfileView()
.tabItem {
VStack {
Image(systemName: (selection == 3 ? "person.crop.square.fill" : "person.crop.square"))
}
}
.tag(3)
}.edgesIgnoringSafeArea(.top)
}
}
问题:
轻按时,如何获取“新列表”标签以模态显示NewListingView
(在SwiftUI中称为工作表?)?
答案 0 :(得分:2)
如果我正确地理解了您的目标,则可以基于以下方法来考虑以下方法:使用事物包装视图将目标视图显示为表格...
在这里:
struct SheetPresenter<Content>: View where Content: View {
@Binding var presentingSheet: Bool
var content: Content
var body: some View {
Text("")
.sheet(isPresented: self.$presentingSheet, content: { self.content })
.onAppear {
DispatchQueue.main.async {
self.presentingSheet = true
}
}
}
}
您的情况的用法是...
// New Listing
SheetPresenter(presentingSheet: $newListingPresented, content: NewListingView())
.tabItem {
VStack {
Image(systemName: (selection == 1 ? "plus.square.fill" : "plus.square"))
}
}
.tag(1)
如果您需要在工作表中更改选项卡selection
,则可以在SheetPresenter
中传递一些其他参数,并将其用于工作表的onDismiss: (() -> Void)?
回调中。
答案 1 :(得分:0)
我认为您正在寻找this解决方案。您创建空的tabItem(Text(" ")
),将Image
设置在所需位置,然后使用.onTapGesture
。在该答案中,我仅说明如何显示ActionSheet
。