Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UITableView中选择类似的快捷菜单列表_Ios_Swiftui - Fatal编程技术网

Ios 在UITableView中选择类似的快捷菜单列表

Ios 在UITableView中选择类似的快捷菜单列表,ios,swiftui,Ios,Swiftui,我有一个显示国家图像、姓名和电话号码的列表,我想知道选择了哪个国家,比如在UITableViewdidSelectRowAt indexPath LocaleInfo struct LocaleInfo: Codable, Identifiable { let id = UUID() let name: String let dialCode: String let code: String var flag: UIImage? { re

我有一个显示国家图像、姓名和电话号码的列表,我想知道选择了哪个国家,比如在UITableView
didSelectRowAt indexPath

LocaleInfo

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)
    }

}
SwiftUI

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() }

SwiftUI没有didSelectRowAt或任何类似的工具,因为它使用状态而不是标准的事件处理程序来进行更改

您应该定义一个
@State
变量,该变量将跟踪当前选定的值:

@State private var selectedLocale: LocaleInfo? = nil
然后使用构造函数:

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() }

其中,
$
变量前面的符号表示将
@State
变量绑定到列表的选择值,这意味着
selectedLocale
变量将始终包含当前选择的区域设置,并且每当此状态变量更改时,将重新计算整个视图(假设您实际上在其他地方使用此状态变量,例如在
if
语句中)。

SwiftUI没有didSelectRowAt或任何类似的命令,因为它使用状态而不是标准事件处理程序进行更改

您应该定义一个
@State
变量,该变量将跟踪当前选定的值:

@State private var selectedLocale: LocaleInfo? = nil
然后使用构造函数:

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() }

其中,
$
变量前面的符号表示将
@State
变量绑定到列表的选择值,这意味着
selectedLocale
变量将始终包含当前选择的区域设置,并且每当此状态变量更改时,将重新计算整个视图(假设您实际在其他地方使用此状态变量,例如在
if
语句中)。

当我尝试此方法时,
@state
值保持
nil
,即使在选择时?当我尝试此方法时,
@state
值保持
nil
,即使在选择时?