禁用TabView SwiftUI中的项目

时间:2020-11-07 11:21:41

标签: swiftui tabview

如何将项目设置为禁用(不可单击)但在tabView中可见?

TabView(selection: $selectedTab) {
            Settings()
                .tabItem {
                    Image(systemName: "gearshape.fill")
                    Text("Settings")
                }.tag(1)
                 .disabled(true) // Not Working
          

2 个答案:

答案 0 :(得分:0)

目前还没有直接的SwiftUI工具(SwiftUI 2.0),因此请从另一个答案https://stackoverflow.com/a/59972635/12299030中找到基于TabBarAccessor的可能方法。

在Xcode 12.1 / iOS 14.1上进行了测试(注意-着色颜色仅针对演示而更改,因为禁用的项目为灰色,在灰色选项卡上不可见)

demo

struct TestTabBar: View {
    init() {
        UITabBar.appearance().unselectedItemTintColor = UIColor.green
    }
    @State private var selection = 0
    var body: some View {
        TabView(selection: $selection) {
            Text("First View")
                .background(TabBarAccessor { tabBar in
                    tabBar.items?.last?.isEnabled = false     // << here !!
                })
                .tabItem { Image(systemName: "1.circle") }
                .tag(0)
            Text("Second View")
                .tabItem { Image(systemName: "2.circle") }
                .tag(1)
        }
    }
}

答案 1 :(得分:0)

我只是创建一种方法来实现您希望得到完全支持和可定制的功能!

使用Xcode版本12.1,iOS 14.1进行测试,

    import SwiftUI

struct ContentView: View {
    

    @State private var selection = 0
    @State private var exSelection = 0
    private var disableThis = 2
    
    
    
    var body: some View
    {
        TabView(selection: $selection)
        {
            viewFinder(selectedIndex: selection == disableThis ? $exSelection : $selection)
                .tabItem { Image(systemName: "1.circle") }
                .tag(0)
            
            
            viewFinder(selectedIndex: selection == disableThis ? $exSelection : $selection)
                .tabItem { Image(systemName: "2.circle") }
                .tag(1)
            
            viewFinder(selectedIndex: selection == disableThis ? $exSelection : $selection)
                .tabItem { Image(systemName: "3.circle") }
                .tag(2)
            
            viewFinder(selectedIndex: selection == disableThis ? $exSelection : $selection)
                .tabItem { Image(systemName: "4.circle") }
                .tag(3)
        }
        .onAppear()
        {
            UITabBar.appearance().barTintColor = .white
        }
        .accentColor(selection == disableThis ? Color.gray : Color.red)
        .onChange(of: selection) { _ in
            if selection != disableThis { exSelection = selection } else { selection = exSelection }
        }
        
        
    }
    
    
    
}





struct viewFinder: View
{
    
    @Binding var selectedIndex: Int
    
    var body: some View {
        
        
        return Group
        {
            if      selectedIndex == 0
            {
                FirstView()
            }
            else if selectedIndex == 1
            {
                SecondView()
            }
            else if selectedIndex == 2
            {
                ThirdView()
            }
            else if selectedIndex == 3
            {
                FourthView()
            }
            else
            {
                EmptyView()
            }
        }
        

        
    }
    
}


struct FirstView: View { var body: some View {Text("FirstView")}}
struct SecondView: View { var body: some View {Text("SecondView")}}
struct ThirdView: View { var body: some View {Text("ThirdView")}}
struct FourthView: View { var body: some View {Text("FourthView")}}

enter image description here