You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何监听Text控件 或通过其他方式将字符串传递给ViewModel

核心实现思路

Text本身是纯展示类控件,没有提供类似TextField的输入监听回调,你不需要监听Text的值,你的需求本质是把当前传入视图的vehicle参数同步给ViewModel,直接对数据源vehicle做同步即可:

具体实现步骤

  1. 首先给ViewModel新增接收车辆参数、加载对应数据的逻辑
import Foundation

class RefuelingListViewModel: ObservableObject {
    @Published var refuelings = [Refueling]()
    // 新增存储当前选中车辆的属性
    var currentVehicle: Vehicle?
    private let persistenceService: PersistenceServiceProtocol

    init(persistenceService: PersistenceServiceProtocol) {
        self.persistenceService = persistenceService
    }
    
    // 新增根据车辆加载加油记录的方法
    func loadRefuelings(for vehicle: Vehicle) {
        currentVehicle = vehicle
        // 替换为你自己的数据库查询逻辑,用vehicle.name/vehicle.id作为过滤条件
        refuelings = persistenceService.fetchRefuelings(vehicleId: vehicle.id)
    }
}
  1. 在视图中同步vehicle参数到ViewModel,两种常用场景适配:
  • 如果vehicle参数在视图生命周期内不会变化,直接用onAppear同步即可
  • 如果vehicle参数可能动态更新,加onChange监听变化实时同步

修改后的视图代码:

import SwiftUI

struct RefuelingListView: View {
    @ObservedObject var viewModel: RefuelingListViewModel
    var vehicle: Vehicle

    var body: some View {
        VStack(alignment: .leading) {
            Text(vehicle.name)
                .font(.system(size: 24))
                .bold()
                .frame(width: 380, height: 60, alignment: .topLeading)
                .padding(.top, -20)
                .padding(.leading, 10)
            
            List(viewModel.refuelings) { refueling in
                RefuelingListRow(refueling: refueling)
            }
        }
        // 视图加载时同步车辆信息、加载数据
        .onAppear {
            viewModel.loadRefuelings(for: vehicle)
        }
        // 如果vehicle可能动态变化,新增以下监听,iOS 14+支持
        .onChange(of: vehicle) { newVehicle in
            viewModel.loadRefuelings(for: newVehicle)
        }
    }
}

极端场景可选方案

如果你确实需要监听Text展示的内容变化(比如Text的内容经过复杂计算生成,没有直接对应的原始数据源),可以用PreferenceKey自定义监听回调,但对于你的场景来说上述方案是性能最优、逻辑最清晰的实现。

内容的提问来源于stack exchange,提问作者beginner992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 20:45:03