我正在做提醒IOS应用程序。如何显示事件卡按下按钮?
事件添加 View 。[Home.swift] [Home.push 加圆圈按钮打开此 View 。] 1
主页上显示事件卡。[EventList.swift] [事件卡。此卡确实显示在 Home.swift 上] 2
我尝试将tapCount保存到userDefaults.in EventList.swift获取tapCount。因为使用ForEach范围。
Home.swift
var tapCount = 0
Button(action: {}) {
tapCount += 1
UserDefaults.standard.set.....
}
EventList.swift
var body: some View {
let tapCount: Int16 = UserDefault.standard.Integer(...) as! Int16
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(0 ..< tapCount) { item in
EventView()
}
}
}
}
但不是做,请教。
最佳答案
我昨天在 SwiftUI 中使用 UserDefaults.standart
的解决方案:
- 使用所需的变量创建
最终类UserData
; - 在
init()
处从UserDefaults
设置此变量; - 在需要的View处设置
UserData
类的@EnvironmentObject var
;
一些简单的例子:
import SwiftUI
final class UserData: ObservableObject {
@Published var tapCount: Int? { // remember, it can be nil at the first launch!
didSet {
UserDefaults.standard.set(tapCount, forKey: "tapCount")
}
}
init() {
// Sure you can set it to 0 with UserDefaults.standard.integer(forKey: "tapCount") ?? 0, but be careful with your ForEach loop
self.tapCount = UserDefaults.standard.integer(forKey: "tapCount")
}
}
// how to use:
struct SomeView: View {
@EnvironmentObject var userData: UserDataSettings
var body: some View {
if self.userData.tapCount == nil {
return AnyView(Text("no taps!"))
} else {
return AnyView(ScrollView(.horizontal, showsIndicators: false) {
HStack {
// you need to check for nil, else you app may crash. this if...else variant should work
ForEach(0 ..< userData.tapCount!) { item in
Text("\(item)")
}
}
})
}
}
}
最后一件事:显示 View 时需要设置.environmentObject(UserData())
(例如,在SceneDelegate
中,如果这是第一个 View )然后将此 userData
变量传递给其他 subview )
关于ios - 按下按钮时如何显示事件卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59062077/