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

如何在macOS文档应用中用OCR结果更新当前TextEdit视图?

解决方案

当然可以直接覆盖当前视图内容,你的代码问题在于没有正确更新绑定的状态变量,以下是修正步骤和代码:

关键修改点

  • 删掉全局变量a,用@State变量myText直接管理文本状态,全局变量会导致状态不同步,完全没必要用。
  • 点击OCR按钮时,直接把OCR返回的结果赋值给myText;如果需要让文档数据同步更新(方便后续保存),同时也要更新document.text。
  • 修复processed视图的布局问题:SwiftUI的View body只能返回单个视图,多个视图要包裹在VStack里。

修改后的完整代码

//
//  ContentView.swift
//  myGrocery
//
//  Created by Erick J Camp on 5/18/23.
//

import SwiftUI

struct ContentView: View {
    @Binding var document: myGroceryDocument
    @State var myText = "myTest" // 直接初始化,无需依赖全局变量

    var body: some View {
        HStack{
            Button("OCR") {
                let ocrResult = ocr()
                myText = ocrResult // 直接更新@State变量,触发视图自动刷新
                document.text = ocrResult // 同步更新文档数据,确保保存时能写入正确内容
                print(ocrResult)
            }
            
            TextEditor(text: $myText)
            processed().frame(maxWidth: 200, alignment: .top)
        }
    }
}

struct processed: View {
    var body: some View {
        VStack { // 用VStack包裹多个子视图,修复布局失效问题
            Text("Hello").frame(alignment: .top)
            Spacer()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView(document: .constant(myGroceryDocument()))
    }
}

func ocr() -> String {
    return "this is a test"
}

效果说明

点击OCR按钮后,myText会立刻更新,TextEditor会自动刷新显示新的OCR结果;同时document.text同步更新,后续用户保存文档时,OCR结果会被正确写入文件,全程不需要重启应用就能完成内容覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:04:55