问题描述
我想在一个视图中点击一个按钮,然后在另一视图中更改文本。 更改布尔值的按钮在LessonOne上,我想在我的ContentView中显示的文本。
第一课中的代码是:
import React,{ Component } from 'react'
class ErrorBoundary extends Component {
constructor (props){
super(props);
this.state = {
hasError: false,error: null,info: null
}
}
static getDerivedStateFromError(error){
this.state.hasError = true
}
componentDidCatch (error,info){
console.log(error);
console.log(info)
}
render() {
if(this.state.hasError){
return <h2>Something went wrong</h2>
}
return this.props.children;
}
}
export default ErrorBoundary;
ContentView中的代码是:
import SwiftUI
import Combine
class LessonTwoButton: ObservableObject {
let didChange = PassthroughSubject <Void,Never >()
var ButtonIsTapped = false {didSet {didChange.send()}}
}
struct LessonOne: View {
@Observedobject var ActivateNextLesson = LessonTwoButton ()
var body: some View {
vstack{
Button (action: {
self.ActivateNextLesson.ButtonIsTapped.toggle()
},label: {
Text("Activate the next lesson")
})
}
}
}
代码可以运行,但是它没有绑定……我继续进行LessonOne,点击按钮,返回ContentView,什么都没有改变。你能告诉我该怎么办吗?
解决方法
您需要在两个视图中使用相同的LessonTwoButton
实例:
struct ContentView: View {
@ObservedObject var lessontwobutton = LessonTwoButton() // create in parent only
...
struct LessonOne: View {
@ObservedObject var ActivateNextLesson: LessonTwoButton // declare only
...
}
NavigationLink(
destination: LessonOne(ActivateNextLesson: lessontwobutton),// pass here
label: {
Text("Next view")
}
)
LessonTwoButton
可以简化:
class LessonTwoButton: ObservableObject {
@Published var ButtonIsTapped = false
}