我有一个显示国家/地区图像、名称和电话代码的列表,我想知道选择了哪个国家/地区,就像UITableView中一样 didSelectRowAt indexPath
语言环境信息
struct LocaleInfo: Codable, Identifiable {
let id = UUID()
let name: String
let dialCode: String
let code: String
var flag: UIImage? {
return UIImage(named: "Countries.bundle/Images/\(code.uppercased())", in: Bundle.main, compatibleWith: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特用户界面
List(filterLocaleInfo.filter({ $0.name.hasPrefix(search) })) { info in
HStack(alignment: .center) {
Image(uiImage: info.flag ?? UIImage())
VStack(alignment: .leading) {
Text(info.name)
.font(.custom("Avenir-Medium", size: 17))
Text(info.dialCode)
.font(.custom("Avenir-Book", size: 15))
}
}
}
.onAppear { self.getLocaleData() }
Run Code Online (Sandbox Code Playgroud)
SwiftUI 没有 didSelectRowAt 或类似的东西,因为它使用状态而不是标准事件处理程序来进行更改。
您应该定义一个@State
变量来跟踪当前选定的值:
@State private var selectedLocale: LocaleInfo? = nil
Run Code Online (Sandbox Code Playgroud)
然后使用init(_:selection:rowContent)
构造函数:
List(filterLocaleInfo.filter({ $0.name.hasPrefix(search) }), selection: $selectedLocale) { info in
HStack(alignment: .center) {
Image(uiImage: info.flag ?? UIImage())
VStack(alignment: .leading) {
Text(info.name)
.font(.custom("Avenir-Medium", size: 17))
Text(info.dialCode)
.font(.custom("Avenir-Book", size: 15))
}
}
}
.onAppear { self.getLocaleData() }
Run Code Online (Sandbox Code Playgroud)
其中$
变量前面的符号表示您将@State
变量绑定到列表的选择值,这意味着该selectedLocale
变量将始终包含当前选定的区域设置,并且每当此状态变量发生变化时,整个视图将被重新计算(假设您实际使用此值)状态变量在其他地方 - 例如在if
语句中)。
归档时间: |
|
查看次数: |
3430 次 |
最近记录: |