在这里提出这个问题,因为尚未在文档中介绍过这个问题,他们会监控并回答此标记。 我正在使用Eureka来构建多值表单。 这是我的代码:
+++ MultivaluedSection(multivaluedOptions: [.Reorder, .Insert, .Delete],
header: "Options",
footer: "footer") {
$0.addButtonProvider = { section in
return ButtonRow(){
$0.title = "Add New Option"
}
}
$0.multivaluedRowToInsertAt = { index in
print(self.form.values())
return NameRow() {
$0.placeholder = "Your option"
}
}
$0 <<< NameRow() {
$0.placeholder = "Your option"
}
}
现在我想在结尾处提取NameRows中的所有值。可以有任意数量的行(基于用户输入)。这就是我试过的:
self.form.values()
但它导致[ : ]
。
如何获得所有值?
答案 0 :(得分:5)
对于有类似问题的人:
form.values()
是空的,因为行没有标记。
要从form
获取值,请为行提供标记,然后您将获得一个值字典,其中键作为这些标记。对于这种情况
+++ MultivaluedSection(multivaluedOptions: [.Reorder, .Insert, .Delete],
header: "header",
footer: "footer") {
$0.addButtonProvider = { section in
return ButtonRow(){
$0.title = "Button Title"
}
}
$0.multivaluedRowToInsertAt = { index in
return NameRow("tag_\(index+1)") {
$0.placeholder = "Your option"
}
}
$0 <<< NameRow("tag_1") {
$0.placeholder = "Your option"
}
}
现在,对于用户插入的任意行数,值将返回["tag_1" : "value 1", "tag 2 : "value 2" ....]
P.S。:使用index
in标记,因为不允许使用重复标记,并且index
值对于不同的行是不同的。
答案 1 :(得分:1)
这是简单得多的方法
首先,将标签添加到整个MultivaluedSection对象。
+++ MultivaluedSection(multivaluedOptions: [.Reorder, .Insert, .Delete],
header: "Options",
footer: "footer") {
$0.tag = "someTag" // added this line
$0.addButtonProvider = { section in
return ButtonRow(){
$0.title = "Add New Option"
}
}
$0.multivaluedRowToInsertAt = { index in
print(self.form.values())
return NameRow() {
$0.placeholder = "Your option"
}
}
$0 <<< NameRow() {
$0.placeholder = "Your option"
}
}
然后,您可以通过
获得值let values = (self.form.values()["someTag"]!! as! [Any?]).compactMap { $0 }
答案 2 :(得分:0)
form.values()返回Dictionary,而Dictionary没有订单信息 因此,您无法从form.values()获取重新排序的值。
我得到了如下的有序数据:
(form.allRows返回Array,并且有订单信息。)
// Dictionary doen't have order info.
let values: Dictionary = form.values()
NSLog("LogA : %@", values)
// Array has order info, and this can return all tags.
let allRow: Array<BaseRow> = form.allRows
for i in 0..<allRow.count {
let tmp: BaseRow = allRow[i]
NSLog("LogB : %d : %@", i, tmp.tag ?? "")
}
// So make ordered data by from.values() and form.allRows like this.
var results: Array = [String]()
for i in 0..<allRow.count {
let tag: String = allRow[i].tag ?? ""
if(tag != ""){
let val: String = values[tag] as! String
results.append(tag + ":" + val)
}
}
NSLog("LogC = %@", results)
谢谢
答案 3 :(得分:0)
如上所述here 只需将标记分配给每一行;
<<< NameRow() {
$0.tag = "NameRow"
$0.title = "Name:"
$0.value = "My name" }