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  //我们想要改变的值,并且希望界面显示修改后的值
    let memotype: String

    var body: some View {
        VStack {
            Text("Memo Type: \(memotype)")
                .font(.headline)
        &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值