iOS开发 swift系列---一个视图数据修改后,如何刷新另外一个视图
题目提及的需求源于这样一个场景,我想在B视图修改一个参数,希望在A视图的界面自动刷新并显示修改的结果。这种跨视图的实时更新可能有很多方法解决,本文采用在ContentView 引入一个参数viewmodel ,在B视图修改数据后发送通知,在A视图 onReceive接收通知, 达到修改内容窗口ContentView的成员变量的目的,最终完成A视图界面的刷新。
说明:
B视图是一个参数设置界面
A视图是主界面,包含多个ContentView
示例代码
1. 定义通知名称
在你的项目中定义多个通知名称:
import Foundation
extension Notification.Name {
static let updateTypeText1 = Notification.Name("updateTypeText1")
static let updateTypeText2 = Notification.Name("updateTypeText2")
}
2. 创建 ContentViewViewModel
创建一个 ContentViewViewModel 来管理 ContentView 的状态:
import Foundation
import Combine
class ContentViewViewModel: ObservableObject {
@Published var titleText: String = ""
func setTitleText(_ text: String) {
titleText = text //A视图的子窗口ContentView 中需要改变的成员变量
}
}
3. 修改 ContentView
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel: ContentViewViewModel //让 ContentView 使用 @ObservedObject 来观察 ContentViewViewModel
let titleText : String //我们想要改变的值,并且希望界面显示修改后的值</