Swift editMode激活时选择器不工作
我有一个视图(Swift editMode激活时选择器不工作,swift,swiftui,swiftui-picker,Swift,Swiftui,Swiftui Picker,我有一个视图(表单),它基本上有一个选择器和一个可以由用户重新安排的项目列表。我希望列表始终是可编辑的,因此用户不必点击en Edit按钮(对于我来说,编辑按钮只影响表单的一小部分似乎是不自然的) 通过设置环境变量editMode:.environment(\.editMode、.constant(.active)),我成功地完成了前面提到的始终打开编辑 问题在于,当表单可编辑时,选择器停止工作(即,当您点击表单时,它不会切换到选项列表) 这是一个重现我问题的MCVE: import Swif
表单
),它基本上有一个选择器和一个可以由用户重新安排的项目列表。我希望列表始终是可编辑的,因此用户不必点击en Edit按钮(对于我来说,编辑按钮只影响表单的一小部分似乎是不自然的)
通过设置环境变量editMode
:.environment(\.editMode、.constant(.active))
,我成功地完成了前面提到的始终打开编辑
问题在于,当表单可编辑时,选择器停止工作(即,当您点击表单时,它不会切换到选项列表)
这是一个重现我问题的MCVE:
import SwiftUI
struct SampleView: View {
enum SortBy: String, CaseIterable {
case FirstName
case LastName
var name: String {
switch (self) {
case .FirstName:
return "First name"
case .LastName:
return "Last name"
}
}
}
@State var sortBy = SortBy.FirstName
var body: some View {
Form {
Section(header: Text("General")) {
Picker("Sort by", selection: $sortBy) {
ForEach(SortBy.allCases, id: \.self) { sortBy in
Text(sortBy.name).tag(sortBy)
}
}
}
Section(header: Text("Phone order")) {
ForEach(1..<10) { number in
Text("\(number)")
}
.onMove(perform: onMove)
.padding(.leading, -39) // remove space dedicated to delete button
}
}
.environment(\.editMode, .constant(.active)) // <--
.navigationBarTitle(Text("Sample View"))
}
private func onMove(source: IndexSet, destination: Int) {
// ...
}
}
struct SampleView_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
SampleView()
}
}
}
导入快捷界面
结构示例视图:视图{
枚举排序:字符串,可大小写{
案例名
案例姓氏
变量名称:String{
开关(自){
案例.名字:
返回“名字”
案例。姓氏:
返回“姓氏”
}
}
}
@状态变量sortBy=sortBy.FirstName
var body:一些观点{
形式{
章节(标题:正文(“概述”)){
选择器(“排序依据”,选择:$sortBy){
ForEach(SortBy.allCases,id:\.self){SortBy in
文本(sortBy.name).tag(sortBy)
}
}
}
部分(标题:文本(“电话订单”)){
ForEach(1..目前看来,这种组合是不可能的…请在下面找到替代解决方案的建议变体-其想法是使用“仅在节中”按钮来激活重新排序
@State private var reorderMode:EditMode=.inactive
var body:一些观点{
形式{
章节(标题:正文(“概述”)){
选择器(“排序依据”,选择:$sortBy){
ForEach(SortBy.allCases,id:\.self){SortBy in
文本(sortBy.name).tag(sortBy)
}
}
}
节(标题:
HStack{
文本(“电话订单”)
垫片()
按钮(self.reorderMode==.inactive?“重新排序”:“完成”){
self.reorderMode=self.reorderMode==.active?.inactive:.active:
}
}
) {
ForEach(1.)。。
@State private var reorderMode: EditMode = .inactive
var body: some View {
Form {
Section(header: Text("General")) {
Picker("Sort by", selection: $sortBy) {
ForEach(SortBy.allCases, id: \.self) { sortBy in
Text(sortBy.name).tag(sortBy)
}
}
}
Section(header:
HStack {
Text("Phone order")
Spacer()
Button(self.reorderMode == .inactive ? "Reorder" : "Done") {
self.reorderMode = self.reorderMode == .active ? .inactive : .active
}
}
) {
ForEach(1..<10) { number in
Text("\(number)")
}
.onMove(perform: onMove)
.padding(.leading, self.reorderMode == .active ? -39 : 0) // remove space dedicated to delete button
}
}
.environment(\.editMode, $reorderMode)
.navigationBarTitle(Text("Sample View"))
}