【问题标题】:Sharing state from parent between siblings in SwiftUI在 SwiftUI 中的兄弟姐妹之间从父级共享状态
【发布时间】:2020-06-06 14:56:45
【问题描述】:

我想要一个ScrollView,其中包含带有导航按钮的页面,如下所示here

我有以下看法。

PageNav(titles: Array<String>, views: Array<AnyView>)
PageNavTop(views: Array<AnyView>)
PageNavBottom(titles: Array<String>)
PageNavButton(title: String, action: () -> Void)

假设我有两个页面,我有以下View 层次结构。

PageNav -> PageNavTop    -> AnyView<page view 1>
                         -> AnyView<page view 2>
        -> PageNavBottom -> PageNavButton(page title 1)
                         -> PageNavButton(page title 2)

PageNavTop 将手势附加到滚动视图,以便我们可以在页面之间滑动,PageNavBottom 让我们使用按钮进行导航。

PageNav 应该包含一个@State var,我将在子视图中将其用作@Binding var。但是,我正在使用自定义 init 函数,我似乎无法弄清楚如何将状态传递到按钮的两个级别。

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    我想通了,我快到了。

    struct PageNav: View {
        @State var activeIndex = 0
        ...
            PageNavTop(views: self.views, activeIndex: self.$activeIndex)
            PageNavBottom(titles: self.titles, activeIndex: self.$activeIndex)
        ...
    

    注意self._activeIndex 中的下划线,这就是我在使用$ 时出错的地方。我首先尝试使用@Binding var activeIndex: Binding&lt;Int&gt;,但当然我不能使用该值。

    struct PageNavBottom: View {
        @Binding var activeIndex: Int
        ...
            PageNavButton(
                title: title,
                action: { self.activeIndex = index }
            )
        ...
        init(titles: [String], activeIndex: Binding<Int>) {
            self._activeIndex = activeIndex
    

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2017-04-23
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2017-10-24
      相关资源
      最近更新 更多