TabView не показывает следующее N SelectionValue, где SelectionValue == UInt - PullRequest
1 голос
/ 09 мая 2020

В приведенном ниже коде не отображается Text("Second View"), потому что private var selection: UInt.

struct TabMenu: View {
    @State private var selection: UInt = 0

    var body: some View {
        TabView(selection: $selection){
            Text("First View")
                .font(.title)
                .tabItem {
                    Image(systemName: "house")
                    Text("Main")
            }
            .tag(0)

            Text("Second View")
                .font(.title)
                .tabItem {
                    Image(systemName: "gear")
                    Text("Preferences")
            }
            .tag(1)
        }
    }
}

В источниках TabView я обнаружил следующее:

extension TabView where SelectionValue == Int {

    @available(watchOS, unavailable)
    public init(@ViewBuilder content: () -> Content)
}

Как я могу создать пользовательский вид, где SelectionValue == Uint?

where SelectionValue == Uint

1 Ответ

1 голос
/ 09 мая 2020

Выбор должен быть того же типа, что и тег (по умолчанию оба типа Int).

Вот решение. Протестировано с Xcode 11.4 / iOS 13.4

struct TabMenu: View {
    @State private var selection: UInt = 0

    var body: some View {
        TabView(selection: $selection){
            Text("First View")
                .font(.title)
                .tabItem {
                    Image(systemName: "house")
                    Text("Main")
            }
            .tag(UInt(0))

            Text("Second View")
                .font(.title)
                .tabItem {
                    Image(systemName: "gear")
                    Text("Preferences")
            }
            .tag(UInt(1))
        }
    }
}
...