Swift - 使用UITableView

时间:2017-02-14 16:39:08

标签: ios uitableview

我想构建一个应用程序来导航数据层次结构。我一直在咨询这个Drill-down Hierarchical UITableView页面,并且真的不知道如何使用xml来实现这种节点结构。我试图避免创建100多个tableviewscontrollers等。从我的理解到目前为止,我相信我需要使用节点。在我一直向下钻孔之后,我将需要使用不同的视图控制器,但我相信我理解这是怎么回事。

这是我的XML文件的一个小例子。如果有必要,我可以对其进行更改。

<hnt>
    <face>
        <action id="1">
            <name>Occipitofrontalis</name>
            <type>data</type>
            <description>data</description>
        </action>
    </face>
    <temporoman>
        <mandibulardep>
            <action id="1">
                <name>Occipitofrontalis</name>
                <type>data</type>
                <description>data</description>
            </action>
            <action id="2">
                <name>Occipitofrontalis</name>
                <type>data</type>
                <description>data</description>
            </action>
        </mandibulardep>
    </temporoman>
</hnt>

<face>
</face>

我正在使用此代码来解析我的xml文件。我不确定如何打印样品。

override func viewDidLoad() {
    super.viewDidLoad()

    if let path = Bundle.main.url(forResource: "01 - MainCategories", withExtension: "xml") {
        if let parser = XMLParser(contentsOf: path) {
            parser.delegate = self
            parser.parse()
        }
    }
}

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {
    eName = elementName
    if elementName == "mainCat" {
        mainCategoriesTitle = String()
    }
}


func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    if elementName == "mainCat" {

        let mCat = MainCategories()
        mCat.mainCategoriesTitle = mainCategoriesTitle

        mainCat.append(mCat)
    }
}


func parser(_ parser: XMLParser, foundCharacters string: String) {
    let data = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)

    if (!data.isEmpty) {
        if eName == "title" {
            mainCategoriesTitle += data
        }
    }
}

1 个答案:

答案 0 :(得分:0)

看起来解析器希望生成类别层次结构。 (我不会在xml示例中看到任何匹配,但我会假设它在那里)。

首先需要的是一个树状结构的Category对象。最简单的是,这是一个NSObject子类,它有一个name和一个子数组 - 重要的是 - 是一个Category的数组。

Category上的类方法可以进行xml解析。将xml解析为树结构的基本概要是:

  • 在启动文档中,构建根目录。使它成为当前节点。
  • 在start元素上创建一个子元素。将它的父级设置为当前节点。让孩子成为当前节点。
  • 在找到任何其他内容(如字符)时,在当前节点上设置属性。
  • 在end元素上,使当前节点的父节点成为当前节点。
  • 在最终文档中,您已完成。

那棵树是在另一个问题中讨论的树。只有当您拥有树结构并且正在浏览当前节点(或当前类别)的概念时,才有可能实现整个想法。