SwiftUI PageView 更新外部视图
SwiftUI PageView update outside view
我有一个 PageStyle TabView,并且想更新它之外的文本。
我已经使用 onAppear 来获取页面更改事件,如果我向前滚动,一开始看起来不错,但是一旦我向后滚动,就会错过一些 onAppear。
这是正确的做法吗?可以这样做吗?
struct PageView: View {
@State var title: String = "hello"
var body: some View {
VStack {
Text(self.title)
TabView {
ForEach(0..<100) { i in
Text("\(i)").onAppear {
self.title = ("TITLE = \(i)")
}
}
}
.tabViewStyle(PageTabViewStyle())
}
}
}
您可以通过在 Text
项目上使用 TabView(selection:
和 tag
修饰符来执行此操作,如下所示(使用 Xcode 12.1 / iOS 14.1 测试)
var body: some View {
VStack {
Text(self.title)
TabView(selection: $title){ // << here !!
ForEach(0..<100) { i in
Text("\(i)")
.tag(String(i)) // << here !!
}
}
.tabViewStyle(PageTabViewStyle())
}
}
我有一个 PageStyle TabView,并且想更新它之外的文本。 我已经使用 onAppear 来获取页面更改事件,如果我向前滚动,一开始看起来不错,但是一旦我向后滚动,就会错过一些 onAppear。
这是正确的做法吗?可以这样做吗?
struct PageView: View {
@State var title: String = "hello"
var body: some View {
VStack {
Text(self.title)
TabView {
ForEach(0..<100) { i in
Text("\(i)").onAppear {
self.title = ("TITLE = \(i)")
}
}
}
.tabViewStyle(PageTabViewStyle())
}
}
}
您可以通过在 Text
项目上使用 TabView(selection:
和 tag
修饰符来执行此操作,如下所示(使用 Xcode 12.1 / iOS 14.1 测试)
var body: some View {
VStack {
Text(self.title)
TabView(selection: $title){ // << here !!
ForEach(0..<100) { i in
Text("\(i)")
.tag(String(i)) // << here !!
}
}
.tabViewStyle(PageTabViewStyle())
}
}