HStack 中的 SwiftUI EditButton 未激活编辑模式

2024-05-15

作为更大表单的一部分,我希望有一个带有列表的部分,其条目可以重新排序。

在整个视图中,应该只能编辑该特定列表,而不能编辑其他内容。因此我希望将编辑按钮放在列表附近。

如果我只是将 EditButton 设置为节标题,则可以对列表项重新排序,但无法显示节标题:

struct ContentView: View {
    
    private let items = Range(1...4).map { "Item " + String($0) }
    
    var body: some View {
        Form {
            Section(header: EditButton()) {
                ForEach(items, id: \.self) { item in
                    Text(item)
                }
                .onMove(perform: reorderItems)
                .onDelete(perform: deleteItems)
            }
        }
    }

    func reorderItems(from sourceIndices: IndexSet, to destinationIndex: Int) { /* ... */ }

    func deleteItems(at offsets: IndexSet) { /* ... */ }
}

但是,如果我将 EditButton 包装在 HStack 中以在右侧显示按钮,则点击“编辑”会将按钮的标题更改为“完成”,但不再启动列表的编辑模式:

struct ContentView: View {

    @Environment(\.editMode) var editMode
    
    private let items = Range(1...4).map { "Item " + String($0) }
    
    var body: some View {
        Form {
            Section(header: HStack {
                Text("Section title")
                
                Spacer()
                
                EditButton()
            }.environment(\.editMode, self.editMode)) {
                ForEach(items, id: \.self) { item in
                    Text(item)
                }
                .onMove(perform: reorderItems)
                .onDelete(perform: deleteItems)
            }
        }
    }

    func reorderItems(from sourceIndices: IndexSet, to destinationIndex: Int) { /* ... */ }

    func deleteItems(at offsets: IndexSet) { /* ... */ }
}

正如代码所示,我还尝试将 editMode 环境变量传递给 HStack,但没有任何帮助。

有什么方法可以让 HStack 中的 EditButton 工作吗?

(备注:由于列表是更大表单的一部分,因此请按照建议将编辑按钮放在部分之外here https://stackoverflow.com/questions/59851275/swiftui-editbutton-does-not-trigger-ondelete-when-embedded-within-an-hstack-sec在我的情况下不是一个选择。)


这是可行的解决方案 - 看起来他们要求 EditButton 是部分的根视图,因此我们可以在其之上构建其他所有内容。 (使用 Xcode 11.4 / iOS 13.4 测试)

Note: @Environment(\.editMode) var editMode不需要

Section(header:
    EditButton().frame(maxWidth: .infinity, alignment: .trailing)
        .overlay(Text("Header"), alignment: .leading)
)
{
    ForEach(items, id: \.self) { item in
        Text(item)
    }
    .onMove(perform: reorderItems)
    .onDelete(perform: deleteItems)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HStack 中的 SwiftUI EditButton 未激活编辑模式 的相关文章

  • SwiftUI withAnimation 完成回调

    我有一个基于某种状态的 swiftUI 动画 withAnimation linear duration 0 1 self someState newState 上述动画完成时是否会触发任何回调 如果有关于如何在 SwiftUI 中使用完成
  • SwiftUI • 如何实现半屏ShareSheet?

    我在我的项目中实现了一个 ShareSheetSwiftUI App using UIViewControllerRepresentable Code struct ShareView UIViewControllerRepresentab
  • StateObject 作为 init() 中另一个对象的参数

    我试图将 StateObject 用户传递给authenticationHelper 但我不能 因为 IDE 说 在初始化所有存储的属性之前使用 self 即使它是在结构体的开头初始化的 我考虑过将 user 的初始化移至 init 但同样
  • SwiftUI:如何删除两个部分之间的间距? (iOS16)

    如何消除两个部分之间的间距 这是我的代码 NavigationStack List Section NavigationLink value Color mint HStack Image systemName person font sy
  • 返回列表 (SwiftUI) 后,选定的列表行背景保持灰色(选定)。 iOS 14 + Xcode 12

    从详细信息视图返回后 所选行保持灰色 在模拟器和真实设备上都会发生 仅在 iOS 14 上 有谁知道如何删除它 使其行为与 iOS 13 上相同 不保持选中状态 这是项目中唯一的代码 没有其他导航或任何东西 let items item1
  • CoreData 和 SwiftUI:环境中的上下文未连接到持久存储协调器

    我正在尝试通过构建一个作业管理应用程序来自学核心数据 我的代码构建良好 应用程序运行正常 直到我尝试将新分配添加到列表中 我收到这个错误Thread 1 EXC BREAKPOINT code 1 subcode 0x1c25719e8 在
  • Swiftui,按钮网格视图

    我在这里检查了有关网格视图的几个问题 但我的问题有点不同 我想为按钮创建一个网格视图 以便每个按钮按下时导航到不同的视图 所以它看起来像这样 这是网格按钮视图 https i stack imgur com Q6WWB jpg 所以我在这里
  • SwiftUI - 获取孩子的大小?

    有什么方法可以获取 SwiftUI 中子视图的大小吗 我基本上希望做 UIKit 相当于 self child frame origin x self child intrinsicContentSize width 2 0 我认为 Geo
  • 在 Swift 2.0 中隐藏 Home 指示器

    我希望隐藏 Home Indicator 虽然这在 Swift 中很简单 但在 SwiftUI 中似乎并不那么容易 我尝试使用这个 如何使用 SwiftUI 隐藏 home 指示器 https stackoverflow com quest
  • FocusState Textfield 在工具栏 ToolbarItem 中不起作用

    让我解释一下 我有一个带有 SearchBarView 的父视图 我正在传递这样的焦点状态绑定 SearchBarView searchText object searchQuery searching object searching f
  • 工作表关闭后 SwiftUI 导航栏项目框架未对齐

    在 SwiftUI 中关闭工作表后 导航栏按钮不可点击 以下是重现该问题的步骤 出示一张单子 将应用程序移至后台一小段时间 2 秒 恢复应用程序并向下滑动关闭工作表 现在导航栏按钮框架未对齐 点击的工作框架与按钮的可见框架不同 这在 iOS
  • SwiftUI - 在 NavigationView 中嵌套 TabView 时不显示导航栏标题

    由于应用程序特定的原因 我必须将 TabView 嵌套在 NavigationView 中 但是选项卡项目的导航栏标题不会显示 只是一个空的导航栏 有什么解决办法吗 struct ContentView View var body some
  • 使用 Swift(使用 SwiftJWT)和 REST API 连接到 Apple Store Connect - 失败并出现 401

    我正在尝试通过他们的 REST API 连接到 Apple Store Connect 虽然这在几天前有效 但我无法弄清楚为什么它停止工作 现在我无法通过身份验证 即我发出的服务器响应的每个请求都是 401 我是否遗漏了什么 我做什么 生成
  • 导航栏隐藏在 SwiftUI 中不起作用

    我有三观 我想隐藏第三个视图中的导航栏 即使我给 navigationBarHidden true 导航栏正在显示 我找不到我哪里做错了 我已在下面附上我的代码和生成的屏幕截图 Xcode 版本 11 1 struct ContentVie
  • SwiftUI:为表单中的单元格添加动画

    我正在尝试动画化我的Form或者更确切地说是其中的细胞 我的问题是 下面的代码给了我一个很好的插入动画 但是对于删除 单元格在看起来很丑陋的延迟后突然被删除 import SwiftUI struct ContentView View St
  • 如何将 WKUIDelegate 实现到 SwiftUI WKWebView 中?

    我正在 Xcode v11 上创建一个 Web 应用程序 但在实现 WKUIDelegate 来显示 Javascript 警报并在 Web 应用程序上正确确认时遇到问题 我在 ContentView swift 上得到了一个非常简单的 w
  • 如何跟踪 SwiftUI 应用程序中的所有触摸

    我正在尝试在 SwiftUI 应用程序中实现锁屏 我需要跟踪每个事件才能重新启动锁定计时器 在 UIKit 应用程序中 我使用了这种方法 重写 UIApplication 它允许了解应用程序中的任何事件 override func send
  • SwiftUI:如何让项目的拖放重新排序起作用?

    我有以下 SwiftUI 视图 struct ContentView View State var model Model var body some View ScrollView LazyVGrid columns columns sp
  • 如何使用 SwiftUI 拖动工作滑块

    我想拖动一个滑块 当然也让它滑动 我可以做其中之一 但我不能两者都做 如何拖动并拥有可用的滑块 我也尝试找到一种方法来删除手势 但我找不到方法来做到这一点 还尝试了 Apple Composition SwiftUI Gestures 文档
  • SwiftUI - 取决于多个条件

    SwiftUI 中是否可以依赖多个条件 例如显示一个工作表 sheet isPresented stateA stateB content this is not working 或者已知有不同的方法 我只能带你去看门 c 墨菲斯 今天是运

随机推荐

  • Websocket java 客户端 Spring + Stomp:传输错误:ConnectionLostException

    我正在尝试使用 Stomp 和 Sockjs 创建一个独立的 Java 应用程序作为今年 Spring 的 websocket 客户端 考虑到 spring 规范和 spring portafolio 示例 我收到此错误 15 18 01
  • NSArray 对象的 RACSignal

    我的 ViewController 上有一个 NSArray 的 ViewModel 对象 property 非原子 强 NSArray viewModels ViewModel 对象看起来像这样 interface ViewModel N
  • Dagger2 - 项目重建错误 - 字段注入 - Android

    我一直在尝试实现 Dagger2 Problem 当我使用构造函数注入时 它工作正常 但是当我使用字段注入时 它会抛出如下错误 Error 6 48 error cannot find symbol class DaggerApplicat
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • python 中的 win32con 模块是什么?我在哪里可以找到它?

    我正在构建一个在 Windows 中使用 python 和 c 的开源项目 我收到以下错误消息 ImportError No module named win32con 同样的情况也发生在它正在运行的 预构建 代码中 除了我的电脑 P 我认
  • 在 mutate 和 across 之后使用 ~separate

    目的是将所有物种 setosa 行转换为一行 setosa 这是一个最小的示例 实际上有更多列和更多组 我有这个数据框 head iris 2 gt select 1 2 5 gt group by Species Sepal Length
  • 多态控制器和调用对象

    我的地址具有多态关系 可以由成员或依赖者拥有 一切看起来都很棒 直到我意识到除非我遗漏了一些东西 否则我不知道创建它的对象是什么类型 有没有办法告诉路由文件包含对象的类型 Models class Member lt ActiveRecor
  • 使用 Google Play 进行结算或使用其他系统进行移动应用

    我正在开发一个移动应用程序 用户可以在其中创作艺术品以供购买 为了下载完成的艺术作品 用户必须购买该艺术作品 然后 艺术作品会以 PNG 格式下载到用户的设备上 该图像只能在应用程序外部使用 下载的艺术作品不能在应用程序内使用 我应该使用
  • Mule 3.4:java.lang.ClassNotFoundException:com.ibm.mq.jms.MQConnectionFactory

    我正在尝试使用 WMQ 作为入站端点 我已从示例目录导入了示例 当我运行流程时 我收到错误 因为找不到类 我将所需的 jar 文件添加到构建路径中 但仍然收到错误 请告诉我 出了什么问题 nested exception is java l
  • Ruby 中的并行赋值运算符

    我正在查看 Ruby 编程 书中的一个示例 def fib up to max i1 i2 1 1 parallel assignment i1 1 and i2 1 while i1 lt max yield i1 i1 i2 i2 i1
  • C# 获取资源文件夹路径

    我的项目中的一些资源很好 并且使用字符串路径可以正常工作 但是如果我将项目移动到另一个目录或另一台计算机 它将停止工作 请我需要在字符串变量中获取项目资源文件夹的路径 像这样的东西 C Users User1 Documents
  • Nervgh Angular 文件上传 - 如何限制文件格式为 jpeg 和 png?

    我正在升级使用 nv file select 指令的应用程序 我不确定如何限制支持上传的文件格式 您想要按照中所述使用过滤器文档 https github com nervgh angular file upload wiki Module
  • scanf导致C程序崩溃

    这个简单的问题导致我的整个程序在第一次输入期间崩溃 如果我删除输入 程序可以正常工作 但是一旦我将 scanf 添加到代码中并输入输入 程序就会崩溃 include
  • 如何使用discord.js列出具有特定角色的所有成员?

    我尝试制作一个简单的机器人 仅列出具有特定角色的所有成员 我浏览了我能找到的大多数类似问题 但他们的答案似乎已经过时了 所以我尝试了这个 但最终结果是 未定义 尽管角色存在 const discord require discord js
  • 自定义行为的配置错误

    我创建了一个与 WCF 服务一起使用的自定义行为 以将所有错误记录到应用程序日志中 我做了一个BehaviorExtensionElement对于行为 public ErrorLoggingBehaviorExtensionElement
  • 如何在 Alexa 中循环播放音频

    我正在为 Alexa 构建睡眠环境音频技能 我正在尝试循环播放音频 这样我就不必下载 10 小时版本的音频 如何让音频正常工作 我将其构建到将播放音频但不循环播放的位置 我已经在我的造雨者技能中解决了这个问题 https www amazo
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • 使用正则表达式验证器上传文件不适用于仅 Firefox IE

    我有一个带有 RegularExpressionValidator 的 FileUpload 和以下验证表达式 a zA Z 2 w w w gif jpg JPG JPEG GIF jpeg png bmp 3dm 3dmf ai drw
  • Autofac 无法解析构造函数的参数“System.String applicationClientId”

    我有以下类 接口结构 class ProviderSetting public delegate ProviderSetting Factory string applicationClientId string appKey public
  • HStack 中的 SwiftUI EditButton 未激活编辑模式

    作为更大表单的一部分 我希望有一个带有列表的部分 其条目可以重新排序 在整个视图中 应该只能编辑该特定列表 而不能编辑其他内容 因此我希望将编辑按钮放在列表附近 如果我只是将 EditButton 设置为节标题 则可以对列表项重新排序 但无