Ios 从主机控制器重新加载SwiftUI视图
有没有办法从其宿主控制器重新加载swiftUI视图 我有一个WKHostingController,它的主体具有快速的UI视图。当视图外部的通知被触发时,我需要更新视图。如果我试图更改@Binding或@State变量,就会出现错误 我无法更新视图之外的值 但我找不到刷新方法 有什么想法吗 主机控制器:Ios 从主机控制器重新加载SwiftUI视图,ios,watchkit,swiftui,Ios,Watchkit,Swiftui,有没有办法从其宿主控制器重新加载swiftUI视图 我有一个WKHostingController,它的主体具有快速的UI视图。当视图外部的通知被触发时,我需要更新视图。如果我试图更改@Binding或@State变量,就会出现错误 我无法更新视图之外的值 但我找不到刷新方法 有什么想法吗 主机控制器: class WorkoutListInterfaceController : WKHostingController<WorkoutListView> { override va
class WorkoutListInterfaceController : WKHostingController<WorkoutListView> {
override var body: WorkoutListView {
WorkoutListView(host: self)
}
override func didAppear() {
// update WorkoutListView!!!
}
func showExercises(forWorkout workout: Workout) {
WKInterfaceController.reloadRootControllers(withNamesAndContexts: [(name: "ExerciseListInterfaceController", context: workout as AnyObject)])
}
func showAddWorkout() {
presentController(withNamesAndContexts: [("AddWorkoutHostingController", context: "" as AnyObject)])
}
}
struct WorkoutListView : View {
weak var host: WorkoutListInterfaceController?
@State private var shouldPresentAddWorkout = false
@State var workouts: [Workout] = Workout.all()
init(host: WorkoutListInterfaceController) {
self.host = host
}
var body: some View {
return List {
Section(header: Text("Workouts")
.font(.system(size: 18))
.fontWeight(.bold)
.frame(height: 18))
{
ForEach(workouts) { workout in
Button(action: {
self.host?.showExercises(forWorkout: workout)
}) {
Text(workout.title)
}
}
}
Button(action: {
self.host?.showAddWorkout()
}) {
Text("Add Workout")
.fontWeight(.medium)
.foregroundColor(.green)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .center)
}
}
.sheet(isPresented: $shouldPresentAddWorkout, onDismiss: {}) {
AddWorkoutView(host: AddWorkoutHostingController())
}
.contextMenu {
Button(action: { self.host?.showAddWorkout() },
label: {
VStack {
Image(systemName: "plus")
Text("Add Workout")
}
})
}
}
}
WorkoutListInterfaceController
的didAspect()
被调用,我想更新WorkoutListView
在
onAppear()
上,不会调用swiftUI视图修改器。我不知道这是一个bug还是预期的行为,这就是为什么我默认使用宿主控制器上的didAspect()
来刷新视图。通过在显示的视图将关闭时发布通知,使用Combine and NotificationCenter实现了这一点:
NotificationCenter.default.post(name: .updateWorkoutsNotification, object: workouts)
然后在WorkoutListView视图模型中订阅该通知您是否尝试过:
。setNeedsBodyUpdate()
您有没有可能发布您的代码?这可能有助于我们帮助你。谢谢