因为我已经构造了一个国家代码列表,并且我可以点击列表项。这里我想在我的文本域内显示选定的国家代码这意味着,当我点击一个国家代码,它应该显示在文本域内。我是swiftUI的新手,如果有人能帮我弄明白这个,那就太好了。
输入图片描述
状态变量如下:
@State private var text = ""
@State private var selection: String!
我的文本域代码在这里:
HStack {
TextField("Country code", text: $text).padding(.leading)
.frame(width: 385, height: 50)
.border(.gray)
.padding(.leading, 25)
.overlay(
Button(action: {
withAnimation {
showCodes.toggle()
}
}, label: {
Image(systemName: "chevron.down")
.foregroundColor(.gray)
.padding(.leading, 320)
.position(x: 215, y: 25)
})
)
.position(x: 195, y: 40)
.padding(.top, -570)
}
列表代码放在这里:
if showCodes == true {
List (selection: $selection) {
ForEach(datas.users, id: .dial_code) { user in
HStack{
Text(user.name)
.font(.callout)
.foregroundColor(Color.black)
Spacer()
Text(user.dial_code)
.font(.callout)
.foregroundColor(Color.blue)
}
}
}
.listRowInsets(EdgeInsets())
.frame(maxWidth: 400, maxHeight: .infinity, alignment: .leading)
.padding(.top, -585)
}
你可以这样设置:
ForEach(datas.users, id: .dial_code) { user in
HStack {
Text(user.name)
.font(.callout)
.foregroundColor(Color.black)
Spacer()
Text(user.dial_code)
.font(.callout)
.foregroundColor(Color.blue)
}
.onTapGesture { text = user.dial_code }
}
我还建议提取HStack连同它的内容在一个单独的函数,如:
private func getCountryCodeCell(for user: User) -> some View {
HStack {
Text(user.name)
.font(.callout)
.foregroundColor(Color.black)
Spacer()
Text(user.dial_code)
.font(.callout)
.foregroundColor(Color.blue)
}
}