SwiftUIでUIPageViewControllerとSegmentedControlを使い
型の異なるページ(クラスが違う)を表示したいです。
下記のURLで実装していますが配列なので自作した異なる型を表示できません。
どうすればできるでしょうか?何か良い方法はないでしょうか。(コード内にメモあります)
https://masamichi.me/development/2019/10/12/swiftui-pageview.html
struct ContentView: View { @State private var page = 0 var body: some View { VStack { Picker("Page", selection: $page) { Text("Page 1").tag(0) Text("Page 2").tag(1) } .pickerStyle(SegmentedPickerStyle()) .padding(EdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12)) //↓↓ここが配列で同じText("Page1")を表示しているが別の型も混じったページを表示したい PageView([ Text("Page1"), Text("Page2") // こういう風に自作した型を表示したいです。 // MeetsListView(), // VegetablesList() ], currentPage: $page) } } }
表示するページのソースです。1ページめ
import SwiftUI struct MeetsListView: View { @EnvironmentObject var userData: UserData //MARK: - メイン var body: some View { ScrollView { VStack { HStack{ Spacer() ProductCell(product: userData.products[0]) Spacer() ProductCell(product: userData.products[1]) Spacer() ProductCell(product: userData.products[2]) Spacer() } } }//body }
表示するページのソースです。2ページめクラスが違います。
内容はほとんど同じで変数が違うだけです。ページを切り分けたい為だけにクラスを分けています。
import SwiftUI struct VegetablesList: View { @EnvironmentObject var userData: UserData //MARK: - メイン var body: some View { ScrollView { VStack { HStack{ Spacer() ProductCell(product: userData.products[3]) Spacer() ProductCell(product: userData.products[4]) Spacer() ProductCell(product: userData.products[5]) Spacer() } } }//body }
上記のつまずいている箇所のPageViewクラスは記載のURLでもありますがこうなっています
struct PageView<Page: View>: View { var viewControllers: [UIHostingController<Page>] @Binding var currentPage: Int init(_ views: [Page], currentPage: Binding<Int>) { self._currentPage = currentPage self.viewControllers = views.map { UIHostingController(rootView: $0) } } var body: some View { PageViewController(controllers: viewControllers, currentPage: $currentPage) } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/12 03:39