MenuPicker 选中 SwiftUI 时排序

Posted

技术标签:

【中文标题】MenuPicker 选中 SwiftUI 时排序【英文标题】:MenuPicker Sort when selected SwiftUI 【发布时间】:2021-02-05 12:36:10 【问题描述】:

我试图在菜单中选择一种排序并发送后端。但不知何故 onTapGesture 没有被触发。我也尝试使用按钮,但它也不起作用。或者是否有任何其他方式来触发任何排序 In 菜单选择器。

var sortMenuPicker : some View 
    
    HStack(alignment: .center)
        
        Spacer()
        
        Picker(selection: $selection, label: SortView().frame(height:UIScreen.main.bounds.height * 0.050), content: 
            ForEach(sortListArray, id: \.uid, content:  item in
                ForEach(item.sortList ?? [],id:\.uid)  data in
                    
                    if item.id == "sort" 
                        
                        Text(data.name ?? "")
                            .onTapGesture 
                                
                                sortId = data.id
                                
                                getProductList()
                                
                                
                      
                            
                    
                    
                
                
            )
        )
        .pickerStyle(MenuPickerStyle())
       
        
      
    

【问题讨论】:

选择变量的类型是什么? 我原以为您需要修改 @State 变量来触发 UI 的刷新。 var selection = UUID() 【参考方案1】:

为您的 Text() 添加标签并删除 Tap Gesture。

Text(data.name ?? "").tag(data.uid) //<-- Here

并使用 onReceive 来收听您的选择

.onReceive(Just(selection))  (_) in
    print(selection)

注意:为此您需要import Combine

【讨论】:

实际上没有用。我不得不说每种排序都有一个代表 data.id 的 id,所以我必须将 data.id 发送到服务器,它会为我提供新的产品列表。每次用户点击不同的排序类型时,我都应该请求。 那么你应该使用id进行选择或者你可以从UUID中找到id。 如何从 UUID 中找到 id 我找不到解决方案。当我在 Menu 中选择时,我可以获得每种排序类型的 UUID。

以上是关于MenuPicker 选中 SwiftUI 时排序的主要内容,如果未能解决你的问题,请参考以下文章

重新排序列表部分 SwiftUI

更改 TabView (SwiftUI) 中未选中图标的颜色

SwiftUI 列表中的可编辑文本字段

SwiftUI 列表(List)中字符串末尾带数字导致排序不正确的解决

如何找出当前是不是在 SwiftUI 中选择了视图

SwiftUI - 未取消选择列表项