swift - 如何在另一个视图中更改类的布尔实例?
问题描述
我想在一个视图中点击一个按钮并更改另一个视图上的文本。更改布尔值的按钮位于 LessonOne 上,而我想在 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")
})
}
}
}
我的 ContentView 中的代码是:
import SwiftUI
import Combine
struct ContentView: View {
@ObservedObject var lessontwobutton = LessonTwoButton()
var body: some View {
NavigationView{
VStack{
Text("Hello, world!")
.padding()
if lessontwobutton.ButtonIsTapped{
Text ("The button has been pressed. Your lesson is unlocked")}
else{
Text("This lesson is locked")
}
NavigationLink (
destination: LessonOne(),
label: {
Text("Next view")
})
}
}
}
}
代码运行,但它没有绑定……我继续 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
}
推荐阅读
- java - 如何设置 onItemClickListener
- javascript - 我可以在原型方法中修改字符串的内容吗?
- reactjs - 在状态更改时一次仅显示一个弹出窗口
- c# - 调试输出窗口一遍又一遍地显示“启动线程”和“停止线程”
- python - 如何修复“Spider 必须返回 Request、BaseItem、dict 或 None,被‘设置’在......”
- python - 刷新python瓶中的页面时数据似乎没有更新?
- python - 如何从 CSV 文件创建具有一个键和多个值的字典?
- grep - Grep 匹配模式但排除特定字符串
- ios - 是否可以从标签栏控制器导航到另一个标签栏控制器?
- javascript - 在 JavaScript 中将动态字符串转换为逻辑表达式