import SwiftUI import FlixyDesign /// Start und Suche nebeneinander. /// /// **Ein `TabView`, und erst jetzt.** Bis hierher gab es genau einen /// Bildschirm, und eine Leiste mit einem einzigen Eintrag wäre Zierrat /// gewesen. Mit der Suche gibt es zwei Orte, zwischen denen man wechselt — /// und dafür ist die Leiste oben die Bedienung, die jeder vom Fernseher /// kennt: sie erscheint, wenn man vom obersten Element aus nach oben wischt, /// und verschwindet wieder. /// /// **Kein Reiter für die Mediatheken.** Die stehen als Reihe auf der /// Startseite. Ein dritter Reiter dafür verspräche einen eigenen Bereich, und /// dahinter läge dasselbe Raster, das eine Reihe tiefer ohnehin erreichbar /// ist. struct TVShell: View { @Binding var deepLinkTarget: MediaRoute? /// Welcher Reiter offen ist. /// /// Ausdrücklich gehalten, nicht dem System überlassen: ein Link aus dem /// Regal über der App führt immer zur Startseite, und stünde gerade die /// Suche offen, passierte sichtbar nichts. @State private var reiter = Reiter.start private enum Reiter: Hashable { case start, suche } var body: some View { TabView(selection: $reiter) { Tab(value: Reiter.start) { TVHomeView(deepLinkTarget: $deepLinkTarget) } label: { Text("sidebar.home") } // **`role: .search` und nicht ein gewöhnlicher Reiter.** tvOS // stellt ihn dadurch ans Ende der Leiste und gibt ihm das // Lupensymbol — dieselbe Stelle wie in Apples eigenen Apps. Tab(value: Reiter.suche, role: .search) { TVSearchView() } } .onChange(of: deepLinkTarget) { _, neu in if neu != nil { reiter = .start } } } }