如何使用 SwiftUI 动态添加联系人等文本字段?

2024-06-24

I have a form where I'd like the user to add any amount of promo codes. The closest native example of this is in the Contacts app. See add url section, which I wouldn't need the "homepage" or "home" links but the delete functionality is: enter image description here

如何使用 SwiftUI 构建它,或者是否有更推荐的方法来处理这种情况?谢谢你的帮助!


所以这是非常快速和肮脏的,但它应该给你一个前进的方向的想法:

struct PromoCodeView: View {
    
    @State var codes = [String]()
    
    func getBinding(forIndex index: Int) -> Binding<String> {
        return Binding<String>(get: { codes[index] },
                               set: { codes[index] = $0 })
    }
    
    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Promo Codes")) {
                    ForEach(0..<codes.count, id: \.self) { index in
                        HStack {
                            Button(action: { codes.remove(at: index) }) {
                                Image(systemName: "minus.circle.fill")
                                    .foregroundColor(.red)
                                    .padding(.horizontal)
                            }
                            TextField("Promo Code", text: getBinding(forIndex: index))
                        }
                    }
                    Button(action: { codes.append("") }) {
                        HStack {
                            Image(systemName: "plus.circle.fill")
                                .foregroundColor(.green)
                                .padding(.horizontal)
                            Text("add promo code")
                        }
                    }
                }
            }
            .navigationBarTitle("Codes")
        }
    }
}

看起来像这样:

EDIT:


好的,我已经让它变得更加通用,因此您只需将视图放入其中并将其绑定到字符串数组即可:

struct ListEditor: View {
    
    var title: String
    var placeholderText: String
    var addText: String
    @Binding var list: [String]
    
    func getBinding(forIndex index: Int) -> Binding<String> {
        return Binding<String>(get: { list[index] },
                               set: { list[index] = $0 })
    }
    
    
    var body: some View {
        Section(header: Text(title)) {
            ForEach(0..<list.count, id: \.self) { index in
                ListItem(placeholder: placeholderText, text: getBinding(forIndex: index)) { self.list.remove(at: index) }
            }
            AddButton(text: addText) { self.list.append("") }
        }
    }
}

fileprivate struct ListItem: View {
    
    var placeholder: String
    @Binding var text: String
    var removeAction: () -> Void
    
    var body: some View {
        HStack {
            Button(action: removeAction) {
                Image(systemName: "minus.circle.fill")
                    .foregroundColor(.red)
                    .padding(.horizontal)
            }
            TextField(placeholder, text: $text)
        }
    }
    
}

fileprivate struct AddButton: View {
    
    var text: String
    var addAction: () -> Void
    
    var body: some View {
        Button(action: addAction) {
            HStack {
                Image(systemName: "plus.circle.fill")
                    .foregroundColor(.green)
                    .padding(.horizontal)
                Text(text)
            }
        }
    }
}

你可以这样使用它:

struct TestView: View {
    
    @State var codes = [String]()
    
    var body: some View {
        NavigationView {
            Form {
                ListEditor(title: "Promo Codes",
                           placeholderText: "Promo Code",
                           addText: "add promo code",
                           list: $codes)
            }
            .navigationBarTitle("Codes")
        }
    }
    
}

它看起来与上面的 GIF 完全相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SwiftUI 动态添加联系人等文本字段? 的相关文章

  • ScrollView 内的 GeometryReader 会折叠 GeometryReader,无论子尺寸如何

    我正在尝试创建一个包含绘图的子视图 我希望该绘图的大小与父容器的一部分成比例 除非将其放入层次结构上方的滚动视图中 否则效果很好 从屏幕截图中可以看出 堆栈内部的声音正如预期的那样最大 但是 当您放入滚动视图时 几何读取器的大小会折叠到接近
  • SwiftUI - NavigationSplitView 内的 NavigationStack 内的嵌套链接不起作用

    我正在尝试 ipadOS16 macOS13 中提供的新导航 API 但在弄清楚如何在 macOS 13 上将 NavigationSplitView NavigationStack 和 NavigationLink 组合在一起时遇到了一些
  • SwiftUI 表未正确取消初始化关联实例

    我在 SwiftUI 中遇到了与工作表演示相关的令人费解的行为 当关闭工作表时 我注意到关联的实例 工作表视图持有的视图模型 似乎没有正确取消初始化 根据我的测试 唯一的情况是deinit使用时按预期被调用 StateObject 相比之下
  • 如何在 SwiftUI 中包装和使用 MarqueeLabel?

    我正在尝试在 SwiftUI 中向文本 歌曲名称 添加选取框效果 以便它在大于屏幕宽度时在屏幕上水平滚动 I know 跑马灯标签 https github com cbpowell MarqueeLabel可用于 UIKit 但我无法将其
  • SwiftUI - 显示符合协议和 ForEach 的元素的视图

    我想写一个 SwiftUI 视图我的结构列表对符合给定协议的元素数组进行操作我的协议 该示例有效 但当然我需要对数组的元素进行 ForEach 如注释行中所尝试的那样 使用 ForEach 我得到 协议类型 MyProtokoll 的值不能
  • 更改 RealityKit 中 AnchorEntity 的旋转

    我在放置对象 3 秒后将 3d 对象放置到 ARViewController 中 然后我想将对象旋转 90 度 arView scene addAnchor anchorEntity DispatchQueue main asyncAfte
  • SwiftUI - ForEach 与 Stride

    我试图创建一个 Hstack d 卡列表 也就是说 我想创建一系列行的滚动视图 每行将包含一个 HStack 其中两个视图并排显示 并由某种列表数据结构初始化 struct MyHStackView View var myArray Som
  • SwiftUI:获取动态背景颜色(深色模式或浅色模式)

    有没有一种方法可以系统地访问 SwiftUI 视图的标准动态背景颜色 无论用户处于浅色模式还是深色模式 例如 我知道以下内容可用于获取主要 例如文本 颜色 let textColor Color primary 但我没有看到任何类似的背景颜
  • SwiftUI 键盘工具栏有条件

    不确定这是否是一个错误或者我是否做错了什么 但如果我使用 toolbar ToolbarItemGroup placement navigationBarLeading if isFocused zipCode Text Test 当等于
  • 处理 SwiftUI 视图中的可选值/nil 值 - 在 SwiftUI 中使用 if let [重复]

    这个问题在这里已经有答案了 视图通常不允许可选参数值 从而导致类似的错误Initializer init requires that String conform to StringProtocol struct Person var na
  • 设备旋转时的 SwiftUI 重绘视图组件

    如何在 SwiftUI 中检测设备旋转并重新绘制视图组件 当第一个出现时 我有一个 State 变量初始化为 UIScreen main bounds width 的值 但当设备方向改变时 该值不会改变 当用户更改设备方向时 我需要重新绘制
  • SwiftUI 全屏图像背景

    我想在背景中显示全屏图像 我已经实现了这个 struct LoginView View var body some View VStack Spacer Text Hallo Text Hallo2 Text Hallo2 Text Hal
  • SwiftUI - 搜索栏

    我有以下名为 SearchBar swift 的文件 import SwiftUI struct SearchBar UIViewRepresentable Binding var text String class Coordinator
  • 如何定义可以接受不同实体的分段获取结果的通用 SwiftUI 视图

    我需要定义一个通用 SwiftUI 视图 它可以接受不同 CoreData 实体的分段获取结果 但我不确定如何定义通用视图 在下面的示例中 我定义了两个分段的获取结果Patient and Doctor实体 我需要能够将它们传递到通用视图
  • 如何迁移到新的 SwiftUI 应用协议?

    我正在开发一个 SwiftUI 应用程序 该应用程序仍然具有场景 应用程序委托文件 并希望将其迁移到新的 SwiftUI 应用程序协议 这只是删除场景 应用程序委托文件 然后将我的 ContentView 在我的例子中为初始视图 添加到 m
  • 文本字段中的 SwiftUI 颜色输入

    我遇到了 SwiftUI 的问题 当用户输入文本字段时 我需要将文本字段中的所有字母设置为红色 将所有数字设置为黑色 假设我有这个代码 TextField A99 text viewModel code padding trailing m
  • 访问全局函数内的环境变量 - SwiftUI + CoreData

    我正在开发一个列表应用程序 并且我有一些针对一种特定数据类型的添加 删除 编辑 加载功能 但是我想概括这些功能 这样我就可以从内部对任何数据类型执行相同的操作任何观点 我已经设置了一个全局变量类 import SwiftUI import
  • SwiftUI |警告:绑定首选项_尝试每帧更新多次。可能的原因?

    自从我按照偏好工作以来 PreferenceKey 我在控制台中收到此消息 Bound preference tried to update multiple times per frame 经过无数次的研究 我还没有找到任何方法可以让它安
  • 如何使 TextField 右对齐(尾随)

    我正在努力拥有一个价值文本域以尾随对齐方式显示 正如你所看到的价值34 3以前导对齐方式显示 我确信我错过了一些明显的东西 但我不知道是什么 有任何想法吗 State private var endwert 34 3 var numberF
  • 使用文本编辑器避免在 SwiftUI 中使用键盘

    我正在尝试重新创建 iOS 笔记应用程序的简单版本 请注意 我是一个十足的 Swift 新手 我当前的问题是我希望我的视图在键盘出现时向上移动 我已经实现了一些代码does这样做 但它有一些讨厌的错误 它首先将视图移动得太高 然后当您开始打

随机推荐