SwiftUI - 未取消选择列表项

Posted

技术标签:

【中文标题】SwiftUI - 未取消选择列表项【英文标题】:SwiftUI - List items are not deselected 【发布时间】:2020-09-21 19:26:32 【问题描述】:

我最近切换到 Xcode 12/ios 14,我注意到我的 List 选择在导航到新视图然后返回时不再取消选择。返回时,被选中的列表项仍然突出显示。据我所知,SwiftUI 没有 deselectRowAtIndexPath 选项。我什至尝试让第一响应者辞职,但没有任何效果。

let someArray = ["one", "two", "three", "four", "five"]
    
var body: some View 
   NavigationView 
      VStack 
         Text("zero")
         List(someArray, id: \.self)  item in
            NavigationLink(
               destination: Text(item)) 
                  Text(item)
               
            
         
     
 

【问题讨论】:

可以添加一些相关代码吗? 我记得这是去年的一个错误,我不知道它是否会完全消失。尝试使用真实设备和模拟器。 我发现将代码剥离回一个 List 可以让它按预期工作。但是当我把它放在另一个视图的 VStack 中时,它停止了取消选择。 这个问题有什么解决办法吗? 在 iOS 14.5 模拟器和 iOS 14.6 设备上仍然可以重现该问题:只要将元素放在 List 前面,导航返回时选择仍然存在。但它在 iOS 15 上是固定的(目前处于测试阶段) 【参考方案1】:

将 .id(UUID()) 放在您的列表中。这将始终重新加载列表并删除选择。

【讨论】:

我尝试在上面示例中的列表末尾添加 .id(UUID()) - 它不起作用。但我很欣赏这个建议。【参考方案2】:

尝试将 UUID 添加到实际的 NavigationLink,而不是列表。该列表将使用您新添加的 UUID 来确定要取消选择的链接。

【讨论】:

以上是关于SwiftUI - 未取消选择列表项的主要内容,如果未能解决你的问题,请参考以下文章

如何取消选择 NavigationLink 中的列表按钮

取消选择 SwiftUI 列表中的项目会使应用程序崩溃

有没有办法在 SwiftUI 中“取消绑定”变量/对象

SwiftUI 列表内容通过选择重置

SwiftUI:列表项跳转到选取器表单中的标题

使用 SwiftUI/Combine,如何避免在 ViewModel 中放置可取消项