【发布时间】:2021-12-28 14:57:18
【问题描述】:
我正在为文本输入制作自定义标签。 这个想法是当文本输入改变时,标签也会随之改变。
我可以让它工作,只要我加载带有 id 值的视图,其中包含一些值,例如 1234 但如果我把它留空......
另外,它只存储那些值,当你输入文本输入时它不会改变。
效果有效,只是数字无效。
VStack {
Custom_Input(id: "")
}
它会引发以下错误。
Thread 1: Fatal error: String index is out of bounds
这很好用
VStack {
Custom_Input(id: "1234")
}
我不确定如何处理这个问题。
这是这里的整个视图。
import SwiftUI
struct Custom_Input: View {
@State var id: String = " "
@State var label1: Character = Character(" ")
@State var label2: Character = Character(" ")
@State var label3: Character = Character(" ")
@State var label4: Character = Character(" ")
var body: some View {
ZStack {
Color.green
VStack {
HStack(spacing: 13){
if(id.count < 1) {
Label("0", systemImage: "")
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.black)
} else {
Label(String(label1), systemImage: "")
.foregroundColor(.white)
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.white)
}
if(id.count < 2) {
Label("0", systemImage: "")
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.black)
} else {
Label(String(label2), systemImage: "")
.foregroundColor(.white)
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.white)
}
if(id.count < 3) {
Label("0", systemImage: "")
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.black)
} else {
Label(String(label3), systemImage: "")
.foregroundColor(.white)
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.white)
}
if(id.count < 4) {
Label("0", systemImage: "")
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.black)
} else {
Label(String(label4), systemImage: "")
.foregroundColor(.white)
.frame(height: 48)
.padding(.leading, -7)
.foregroundColor(.white)
}
}
.onAppear {
label1 = id[0]
label2 = id[1]
label3 = id[2]
label4 = id[3]
}
.frame(width: 311, height: 48)
TextField("", text: $id)
.background(.red)
.frame(width: 311, height: 48)
}
}
.frame(width: 311, height: 48)
}
}
extension StringProtocol {
subscript(offset: Int) -> Character {
self[index(startIndex, offsetBy: offset)]
}
}
struct Custom_Input_Previews: PreviewProvider {
static var previews: some View {
Custom_Input(id: "1234")
}
}
【问题讨论】:
标签: swiftui