首页 > 解决方案 > 将货币符号动态组合到 TextField 文本

问题描述

是否可以在通过 TextField 在单个文本行上显示之前将货币符号动态组合到某些文本?目前,我的货币符号位于 TextField 文本“输入金额 >”上方的行中

此代码产生错误:“无法分配给属性:'self' 是不可变的”和“类型 '()' 不能符合 'View';只有 struct/enum/class 类型可以符合协议。”

我想在表单中使用这样的东西。

struct ContentView: View {
    
    @State private var moneyS: String = ""
    var curr: String = ""
    var curSymb: Int = 2
    var mxx: String = ""
    
    
    var body: some View {

        Text("Blah Blah Blah")
        
        switch curSymb {
        
        case 1:
            curr = "$"
            
        case 2:
            curr = "€"
            
        default:
            curr = "£"
            
        }
        
        mxx = "Enter Amount > " + curr
        
        
        
        TextField(mxx, text: $moneyS)
        .keyboardType(.decimalPad)

    }
}

标签: swiftui

解决方案


是的,这当然是可能的。默认情况下,它使用VStack-like 布局并垂直放置所有视图。我们可以使用HStack(horizo​​ntal stack) 来水平对齐您的文本视图。

这是更新的版本:

struct ContentView: View {
    
   ...
    
    var curr: String {
        switch curSymb {
        case 1: return "$"
        case 2: return "€"
        default: return "£"
        }
    }
    
    var body: some View {
        HStack(alignment: .firstTextBaseline) { // note that we use firstTextBaseline in order to keep the text aligned even if you decided to have different font for every part of the text
            Text("Blah Blah Blah")
            TextField("Enter Amount > " + curr, text: $moneyS)
                .keyboardType(.decimalPad)
        }
    }
}

另外,请注意,我还将curr计算移至一个变量,以使body代码保持较小。


推荐阅读