swift - 如何创建一组具有在 SwiftUI 中编辑的单独变量的文本字段?
问题描述
我正在创建一个简单的程序,它创建了几个要编辑的文本字段。我使用以下代码来创建它们:
ForEach((1...textfields).reversed(), id: \.self){ _ in
TextField("Type here:", text: $text)
}
该textfields
变量由代码前面的几个按钮控制,但真正的问题是“文本”变量。这些按钮添加和删除文本字段,但编辑一个会编辑它们,这不是我想要的。所以我的问题是,如何创建包含唯一变量但仍然可以从ForEach
(或类似的)循环中创建的文本字段?
解决方案
问题
TextField
这里的任务是为s 值组织某种存储。
解决方案
步骤1
可以使用@State
或@Binding
修饰符来组织存储。由于我们这里需要有多个TextField
s,因此 an Array
of String
s 可能是存储类型的不错选择。这可以写成:
@State var values = ["1", "2", "3", "4", "5"]
请注意,我们在此处将初始值提供为空字符串。仅用于示例目的。如果您需要从父视图中指定值,您可以使用任何您想要或替换@State
的内容。@Binding
请注意,[String]
类型将由 swift 自动推断。
第2步
然后,需要在视图的主体实现中将这些值转换为 TextField
s。为此,我们ForEach
稍微修改一下:
// iterating through the indices of the values
ForEach(values.indices, id: \.self) { index in
// using index to create binding to the value
TextField("Type here:", text: $values[index])
}
结果
这是我们得到的最终结果:
struct MultipleTextViews: View {
@State var values: [String] = ["1", "2", "3", "4", "5"]
var body: some View {
ForEach(values.indices, id: \.self) { index in
TextField("Type here:", text: $values[index])
}
}
}
推荐阅读
- angular - Angular RX/JS 嵌套 Observable 调用
- xamarin - Xamarin Android 警告 XA0106,无法删除这样数百个警告
- php - 另一个if里面的PHP未定义索引
- ios - Crashlytics - EXC_BAD_ACCESS WebKitLegacy 崩溃 ios
- tensorflow - 张量流估计器我如何加载检查点一次以预测很多时间
- sql - Oracle 触发器错误 ORA-04091
- php - 在后端显示来自 Woocommerce 下拉结帐字段的选项标签
- java - 用于验证整数部分中最多 5 位和最多 2 位小数的格式的正则表达式
- sql - 投射到自定义域 PostgreSQL
- ios - 使一个协议符合另一个协议