将货币符号动态组合到TextField文本

时间:2020-09-25 03:20:50

标签: swiftui

在通过TextField在单个文本行上显示货币符号之前,是否可以将货币符号动态组合到某些文本?目前,我的货币符号在TextField文本“ Enter Amount>”

上方的行上

此代码产生错误:“无法分配给属性:'自身'是不可变的”,并且“类型'()'不符合'视图';只有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)

    }
}

2 个答案:

答案 0 :(得分:0)

是的,当然有可能。默认情况下,它使用类似VStack的布局并将所有视图垂直放置。我们可以使用HStack(水平堆栈)将您的文本视图水平对齐。

这是更新的版本:

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代码保持较小。

答案 1 :(得分:0)

感谢您的协助。我喜欢简洁的紧凑代码。

很抱歉,您不清楚这句话等等。 VStack中还包含其他文本行,但HStack中仅包含“ Enter Amount>”和货币符号。