以编程方式更新 SwiftUI 中的状态

问题描述 投票:0回答:1

我是 Swift 新手,来自 React,我确信我正在考虑状态错误。我有一个具有简单文本输入的视图。根据外部事件,我想更新此字段的内容以匹配当前的粘贴板内容。

struct ContentView: View {
    
    @State var input: String = ""
    
    var body: some View {
        HStack {            
            VStack( alignment:.leading, spacing: 16, content:{
                TextField("#000000", text: $input)
            })
            .padding()
        }
    }
    
    func update(){
        let pasteboard = NSPasteboard.general
        let firstItem = pasteboard.pasteboardItems![0];
        let string = firstItem.string(forType: NSPasteboard.PasteboardType(rawValue: "public.utf8-plain-text"))!
        NSLog(string);
        input = string;
    }
}

一切似乎都有效,除了

input = string
不更新调试器中字段的内容(也不更新状态变量)我可以看到函数何时被调用,但它不会影响字段内容。

我只需要调用一些不同的 setState 函数吗?还是这不可能?

swift swiftui state textfield
1个回答
0
投票

使用

.onAppear{...}

尝试此方法
struct ContentView: View {
    
    @State var input: String = ""
    
    var body: some View {
        HStack {
            VStack( alignment:.leading, spacing: 16, content:{
                TextField("#000000", text: $input)
            })
            .padding()
        }
        .onAppear { update() }  // <---here
    }
    
    func update(){
        let pasteboard = NSPasteboard.general
        let firstItem = pasteboard.pasteboardItems![0]
        let string = firstItem.string(forType: NSPasteboard.PasteboardType(rawValue: "public.utf8-plain-text"))!
        input = string
    }
}

您需要阅读更多有关 SwiftUI 基础知识的内容,尤其是

@State
@Binding

的使用
© www.soinside.com 2019 - 2024. All rights reserved.