URL链接是具有多个部分的UiTableView

时间:2017-08-31 14:23:22

标签: ios swift uitableview url

我创建了一个UiTableViewController,它有四个部分,每个部分都有多个行。我还实现了一系列URL。我是编码的新手,这是两个以前的TableViewControllers的工作组合,但我遇到的问题是URL数组适用于每个部分。即,当单击第1部分中的第1行时,它会打开第一个链接,但是当单击第2部分中的第1行时,它也会打开第一个链接。

如何将URL数组限制为仅一个部分?

我明白为什么它不起作用,并尝试了很多东西,但到目前为止还没有。

struct Objects {
    var sectionName : String!
    var sectionObjects :[String]!
}

var objectsArray = [Objects]()

let urlArray1 = ["http://www.apple.co.uk","http://www.google.co.uk","https://www.dropbox.com/","tel://123456789",""]

override func viewDidLoad() {
    super.viewDidLoad()

    objectsArray = [Objects(sectionName: "Section 1", sectionObjects: ["one", "two", "three", "four","four A"]),
                    Objects(sectionName: "Section 2", sectionObjects: ["five", "six", "seven", "eight"]),
                    Objects(sectionName: "Section 3", sectionObjects: ["nine", "ten", "eleven", "twelve"]),
                    Objects(sectionName: "Section 4", sectionObjects: ["thirteen", "fourteen", "fifteen", "sixteen"])]
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as UITableViewCell!

    cell?.textLabel?.text = objectsArray[indexPath.section].sectionObjects[indexPath.row]

    return cell!
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return objectsArray[section].sectionObjects.count
}

override func numberOfSections(in tableView: UITableView) -> Int {
    return objectsArray.count
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return objectsArray[section].sectionName
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let urlString = self.urlArray1[indexPath.row]
    if let  url = URL(string:urlString)
    {
        UIApplication.shared.open(url, options: [:])
    }

1 个答案:

答案 0 :(得分:0)

您的urlArray1需要设置为单独的部分。

当你致电let urlString = self.urlArray1[indexPath.row]时,它只取决于行,而不是部分。所以(第0部分,第0行),(第1部分,第0行),(第2部分,第0行)等都返回相同的值。

我会在您的Object结构中添加一个网址属性:

struct Objects {
    var sectionName: String
    var sectionObjects: [String]
    var urlStrings: [String]
}

然后您可以像这样访问适当的:

let urlString = objectsArray[indexPath.section].urlStrings[indexPath.row]

(请务必在urlStrings)中定义objectsArray