SwiftUI目前通过TabView呈现视图吗?

时间:2019-12-26 04:33:02

标签: ios swift xcode swiftui tabview

我的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中称为工作表?)?

2 个答案:

答案 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