在 SwiftUI 中的兄弟姐妹之间从父级共享状态
Posted
技术标签:
【中文标题】在 SwiftUI 中的兄弟姐妹之间从父级共享状态【英文标题】:Sharing state from parent between siblings in 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
函数,我似乎无法弄清楚如何将状态传递到按钮的两个级别。
【问题讨论】:
【参考方案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<Int>
,但当然我不能使用该值。
struct PageNavBottom: View
@Binding var activeIndex: Int
...
PageNavButton(
title: title,
action: self.activeIndex = index
)
...
init(titles: [String], activeIndex: Binding<Int>)
self._activeIndex = activeIndex
【讨论】:
以上是关于在 SwiftUI 中的兄弟姐妹之间从父级共享状态的主要内容,如果未能解决你的问题,请参考以下文章
如何使用JQuery在输入中选择其孩子在最后一个不为空的父级的上一个兄弟姐妹