ios 从Eureka 表单的多值节获取表单值

rvpgvaaj  于 2022-12-15  发布在  iOS
关注(0)|答案(4)|浏览(271)

在这里问这个问题是因为文档中还没有涉及到这个问题,他们会监控并回答这个标签。我正在使用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中的所有值。可以有任意数量的行(基于用户输入)。这是我尝试的:
但结果是[ : ]
如何获得所有值?

fnvucqvd

fnvucqvd1#

对于有类似问题的任何人:
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值对于不同的行是不同的。

gajydyqb

gajydyqb2#

这是一种简单得多的方法
首先,向整个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 }
igsr9ssn

igsr9ssn3#

values()格式返回Dictionary,而Dictionary没有订单信息。
因此,您无法从form.values()中获取重新排序的值。
我得到的orderd数据如下:
(表单.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)

谢谢

x0fgdtte

x0fgdtte4#

here所述,只需将标记赋予每一行;

<<< NameRow() {
$0.tag = "NameRow"
$0.title = "Name:"
$0.value = "My name" }

相关问题