Как назначить каждое действие IBAction (во втором ViewController) для выполнения в соответствии с определенным выбором c в TableView? - PullRequest
1 голос
/ 08 мая 2020

Заявление об ограничении ответственности: новичок в этом, и я опишу проблему в меру моих возможностей.

App Screenshot

Я создаю приложение, которое состоит из TableView с неделями с 1 по 8. Когда пользователь делает выбор, приложение переходит в ViewController, который выглядит одинаково для каждого выбор. Однако кнопки в этом втором контроллере представления должны отправлять пользователя по URL-адресу, указанному c для выбранной недели. Прямо сейчас приложение показывает одни и те же ссылки для каждой выбранной недели. Мне в основном нужно каждую неделю иметь набор уникальных URL-адресов, соответствующих этой неделе.

Мой код прилагается, и я также пытаюсь прикрепить фото-схему того, что это приложение должно делать.

import UIKit

struct WeekInfo {
    let description: String
    let url: URL
}

class WeekTableViewController: UITableViewController {

    var week = [
    WeekInfo(description: "Week 0:", url: URL(string: "https://somewhere.com")!),
    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")!),
    WeekInfo(description: "Week 4: ", url: URL(string: "https://somewhere.com")!),
    WeekInfo(description: "Week 5:", url: URL(string: "https://somewhere.com")!),
    WeekInfo(description: "Week 6:", url: URL(string: "https://somewhere.com")!),
    WeekInfo(description: "Week 7:", url: URL(string: "https://somewhere.com")!),
    WeekInfo(description: "Week 8:", url: URL(string: "https://somewhere.com")!),
    WeekInfo(description: "Final Prep", url: URL(string: "https://somewhere.com")!),
    WeekInfo(description: "Final Project", url: URL(string: "https://somewhere.com")!)

    ]


    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
         self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem
    }




    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        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].description
        return cell

    }

    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
            }
        }
    }

Контроллер следующего вида:

import UIKit

class WeekDetailViewController: UIViewController {

    var week: WeekInfo!


    @IBOutlet weak var lessonCompleteBtn: UIButton!
    @IBOutlet weak var Button1: UIButton!
    @IBOutlet weak var Button2: UIButton!
    @IBOutlet weak var Button3: UIButton!
    @IBOutlet weak var Button4: UIButton!


    override func viewDidLoad() {
        super.viewDidLoad()


        lessonCompleteBtn.backgroundColor = UIColor.gray
        lessonCompleteBtn.layer.cornerRadius = 20

    }
    @IBAction func lessonBtnTapped(_ sender: AnyObject) {
        sender.setTitle("Complete!", for: [])
        if lessonCompleteBtn.backgroundColor == UIColor.gray{
            lessonCompleteBtn.backgroundColor = UIColor(red: 17/255, green: 107/255, blue: 0/255, alpha: 1.0)
        }
        else if lessonCompleteBtn.backgroundColor == UIColor(red: 17/255, green: 107/255, blue: 0/255, alpha: 1.0){
            sender.setTitle("Mark Complete", for: [])
            lessonCompleteBtn.backgroundColor = UIColor.gray
        }
    }

    @IBAction func Button1(_ sender: Any) {
        UIApplication.shared.open(URL(string: "https://resourelink1.com")! as URL, options: [:], completionHandler: nil)
    }
    @IBAction func Button2(_ sender: Any) {
        UIApplication.shared.open(URL(string: "https://resourcelink2.com")! as URL, options: [:], completionHandler: nil)
    }
    @IBAction func Button3(_ sender: Any) {
        UIApplication.shared.open(URL(string: "https://resourcelink3.com")! as URL, options: [:], completionHandler: nil)
    }
    @IBAction func Button4(_ sender: Any) {
        UIApplication.shared.open(URL(string: "https://resourcelink4.com")! as URL, options: [:], completionHandler: nil)
    }
}

1 Ответ

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

Затем сделайте это массивом, например

struct WeekInfo {
  let description: String
  let urls: [URL]
}


var week = [
WeekInfo(description: "Week 0:", urls:[ URL(string: "https://somewhere1.com")!, URL(string: "https://somewhere2.com")!]),
.......]

И во втором v c используйте его как week.urls[0] // установите индекс, как вам нужно

...