SwiftUI Form内嵌Picker点击选项无响应、无法选中问题求助
Picker选中无响应问题解决方案
根因
核心问题是Picker的tag类型与绑定的selection类型不匹配:
你为Picker绑定的selection参数为可选类型Month?/Category?,但每个选项设置的tag(month)/tag(category)为非可选类型,两者类型不一致导致Picker无法完成选中值的匹配校验,因此不会触发选中反馈、返回上一级、变量赋值的逻辑。
解决方案
直接修改每个选项的tag,将其强转为与selection一致的可选类型即可,修改后的Picker代码如下:
Picker(month?.name ?? "Seleziona il mese", selection: $month) { ForEach(model.months) { month in Text(month.name).tag(month as Month?) } } Picker(category?.name ?? "Seleziona la categoria", selection: $category) { ForEach(model.categories) { category in Text(category.name).tag(category as Category?) } }
你现有的Month、Category类的Equatable、Hashable实现符合要求,无需额外修改,上述修改在iOS14、iOS15环境下均可正常生效。
可选优化建议
如果你的业务场景不需要Month、Category的引用语义,可以将两者从class改为struct,SwiftUI对值类型的状态监听更原生,能避免后续潜在的状态同步异常问题。
内容的提问来源于stack exchange,提问作者Andrea Mario Lufino
相关产品推荐
相关产品推荐

