Я пытался пропустить элемент в моем TabView. Я пытался с .disable()
и if else
, но ничего не работает. Мой флаг переключения отлично работает, но вид не хочет обновлять. Любые идеи? Я пробовал другие вещи, но ничего не работает. Или как я могу обновить мой полный просмотр?
@ObservedObject var coachPresenter : CoachPresenter
var body: some View {
TabView{
DashboardView()
.tabItem({
Image(systemName: "rectangle.3.offgrid")
Text("Dashboard")
})
//If flag set true coach item will appear
if coachPresenter.settingActivated {
CoachView()
.tabItem({
Image(systemName: "shield")
Text("Coach")
})
}
}
Здесь мой просмотр настроек:
struct SettingsView: View {
@ObservedObject var coachPresenter : CoachPresenter
var body: some View {
VStack{
Text("SettingsView")
Toggle(isOn: $coachPresenter.settingActivated){
Text("Coach Version")
}
Button(action: {
print("\(UserDefaults.standard.bool(forKey: "coach"))")
}) {
Text("Status")
}
}
}
}
А вот другой мой просмотр для двухсторонней привязки:
class CoachPresenter: ObservableObject {
var willChange = PassthroughSubject<Bool, Never>()
var settingActivated: Bool = UserDefaults.settingActivated {
willSet {
UserDefaults.settingActivated = newValue
willChange.send(newValue)
}
}
}
extension UserDefaults {
private struct Keys {
static let settingActivated = "coach"
}
static var settingActivated: Bool {
get {
return UserDefaults.standard.bool(forKey: Keys.settingActivated)
}
set {
UserDefaults.standard.set(newValue, forKey: Keys.settingActivated)
}
}
}