Помощь в различении URL-адресов и данных Tableview - PullRequest
1 голос
/ 07 мая 2020

Заявление об отказе от ответственности, новое в этом: я разрабатываю приложение, которое предоставляет разные ресурсы для каждого элемента в TableView. Когда пользователь делает выбор, приложение переходит в новый ViewController. Хотя viewController одинаков для каждого выбора TableView, кнопки URL-адреса внутри должны иметь разные URL-адреса, соответствующие выбору tableview.

У меня проблемы с возможностью кодирования разных URL-адресов для каждого массива tableView [с 0 по 8 неделю]. Прямо сейчас кнопки в контроллере представления имеют одинаковые 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
            }
        }
    }

1 Ответ

0 голосов
/ 07 мая 2020

Измените описание недели с простой String на структуру:

/// 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!
}
...