首页 > 解决方案 > 协助区分 URL 和 Tableview 数据

问题描述

免责声明,新的:我正在开发一个应用程序,为 TableView 中的每个项目提供不同的资源。当用户做出选择时,应用程序会进入一个新的 ViewController。虽然每个 TableView 选择的 viewController 都是相同的,但其中的 URL 按钮应该具有与 tableview 选择相对应的不同 URL。

我无法为每个 tableView 数组编写不同的 URL [第 0 周到第 8 周]。现在,View Controller 中的按钮对于每个 tableview 选择都有相同的 URL。希望我解释得足够清楚,但附上代码。如果需要更多信息,请告诉我。谢谢!

import UIKit

class WeekTableViewController: UITableViewController {



    var week = [
    "Week 0:",
    "Week 1:",
    "Week 2:",
    "Week 3:",
    "Weel 4:",
    "Week 5:",
    "Week 6:",
    "Week 7:",
    "Week 8:"]

    override func viewDidLoad() {
        super.viewDidLoad()


    }





    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return week.count
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedWeek = week[indexPath.row]
        performSegue(withIdentifier:"moveToWeekDetail", sender:selectedWeek)
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        cell.textLabel?.text = week[indexPath.row]
        return cell

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if let weekViewController = segue.destination as? WeekDetailViewController{
            if let selectedWeek = sender as? String{
                weekViewController.title = selectedWeek
            }
        }
    }

标签: iosswiftxcodeuitableviewdidselectrowatindexpath

解决方案


将一周的描述从简单的字符串更改为结构:

/// A struct to hold information about each week
/// Add more properties as needed
struct WeekInfo {
    let description: String
    let url: URL
}

class WeekTableViewController: UITableViewController {
    // It's no longer an array of strings
    var week = [
        WeekInfo(description: "Week 1", url: URL(string: "https://somewhere.com")!),
        WeekInfo(description: "Week 2", url: URL(string: "https://somewhere.com")!),
        WeekInfo(description: "Week 3", url: URL(string: "https://somewhere.com")!),
    ]

    // ...

    override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if let weekViewController = segue.destination as? WeekDetailViewController{
            // Pass the week's info onto the detail view controller
            if let selectedWeek = sender as? WeekInfo {
                weekViewController.title = selectedWeek.description
                weekViewController.week = selectedWeek
            }
        }
    }
}

class WeekDetailViewController: UIViewController {
    // Info about the week
    var week: WeekInfo!
}

推荐阅读