Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Every tab item has a view, is it possible to give no view to tabitem #17

Closed
vchaubey-ontic opened this issue May 5, 2023 · 4 comments
Closed

Comments

@vchaubey-ontic
Copy link

The idea behind doing this, I want to open a view on the top of previous selected view instead of opening a new view.

@onl1ner
Copy link
Owner

onl1ner commented May 5, 2023

Hello, @vchaubey-ontic!

I did not get your question, can you please clarify using some examples/use cases reflecting your idea?

@vikaschaubey57
Copy link

vikaschaubey57 commented May 8, 2023

Ok, let me try.
My implementation is something like this -

       TabBar(selection: $selection, visibility: $visibility) {
            Home()
                .tabItem(for: TabItems.first)
            
            Search()
                .tabItem(for: TabItems.second)
            
            AddView()
                .tabItem(for: TabItems.third)
            
            Notifications() {
            .tabItem(for: TabItems.fourth)
            
            More()
                .tabItem(for: TabItems.fifth)
       }

Right now every tab have their own view, right?, what I want to achieve is, when I click 4th tab i.e More

  1. Most Recent / Previous selected tab should be highlighted instead of more.
  2. Instead opening a new View More() , it should present on Most Recent / Previous selected tab like a popup and on dismiss popup @State of Most Recent / Previous selected should persist so that it always looks a like a view presented on instead opening a new tab.

Ex: I have to present some Menu on 4th tab and previous selected view should be visible.

@onl1ner
Copy link
Owner

onl1ner commented May 11, 2023

@vikaschaubey57, got it. Unfortunately, there is no way to implement that using the toolkit provided by this library, but you can workaround that by wrapping More view into some entity that will automatically on onAppear call present your view as a sheet.

Here is quick and dirty way to achieve this:

// Wrapper.swift

struct Wrapper<Content: View>: View {
    private let content: Content
    
    @State private var isPresented: Bool = false
    
    init(content: Content) {
        self.content = content
    }
    
    var body: some View {
        Color.clear
            .sheet(isPresented: self.isPresented, content: { self.content })
            .onAppear { self.isPresented = true }
    }
}

// TabBar.swift

TabBar(selection: $selection, visibility: $visibility) {
    Home()
        .tabItem(for: TabItems.first)
            
    Search()
        .tabItem(for: TabItems.second)
            
    AddView()
        .tabItem(for: TabItems.third)
            
    Notifications() {
        .tabItem(for: TabItems.fourth)
            
    Wrapper(content: More())
        .tabItem(for: TabItems.fifth)
}

Hope it helps :)

@onl1ner
Copy link
Owner

onl1ner commented Jul 18, 2023

Closing due to inactivity, feel free to reopen if the issue still exists

@onl1ner onl1ner closed this as completed Jul 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants