【发布时间】:2021-12-25 16:14:37
【问题描述】:
我正在尝试实现附加 GIF 中的行为:
对不起,高速,我不得不大幅压缩它才能上传到这里。如果您想自己看一下,该应用程序是 Readdle 的“文档”。
无论如何:我正试图实现这种行为(排序和过滤,包括动态向上箭头图标)。
我尝试了以下方法,但无法实现这种“ontap”体验。 On Change 仅在我更改值时触发,但是当我想对现有值进行升序和降序排序时它不起作用(这很明显,因为它没有改变)。我已经玩过“didSet”,但这也没有用。
您知道如何实现这一点吗?
下面是我的代码:
import SwiftUI
struct ContentView: View {
@State var selection = 0
@State var sortByAsc = true
@State var filterColumn = "A"
//Test to set case via picker but picter doesnt execute didSet
@State var myFilterTest: MyFilters = .alphabetical {
didSet {
switch myFilterTest {
case .creationDate:
sortByAsc.toggle()
print("c")
case .rating:
sortByAsc.toggle()
print("b")
case .alphabetical:
sortByAsc.toggle()
print("a")
}
}
}
var body: some View {
NavigationView {
Text("Hello, World!")
.padding()
.navigationTitle("SwiftUI")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Menu(content: {
Picker("My Picker", selection: $selection) {
Label("Title", systemImage: sortByAsc ? "arrow.down" : "arrow.up")
.tag(0)
Label("Rating", systemImage: sortByAsc ? "arrow.down" : "arrow.up")
.tag(1)
.onTapGesture {
print("tap")
}
}
.onChange(of: selection) { tag in
print("Selected Tag: \(tag)")
sortByAsc.toggle()
if(tag == 0) {
filterColumn = "Title"
}
if(tag == 1) {
filterColumn = "Rating"
}
}
}, label: {
Image(systemName: "ellipsis.circle")
})
}
}
}
}
}
enum MyFilters: CaseIterable {
case alphabetical
case rating
case creationDate
}
【问题讨论】:
-
这个 gif 对我来说完全没用。
-
您会看到“名称”和“基准”被按下,并且箭头根据排序模式切换。如文中所述。抱歉这么快。
-
不,我什么也没看到。
-
为你添加了一些帧延迟:*
标签: sorting filter swiftui toolbar picker