我创建了一个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: [:])
}
答案 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