Попытка переместить массив в табличное представление - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь переместить цели из массива в табличное представление, и у меня возникают проблемы с выполнением этой задачи.

Вот мой код.

import UIKit

class GoalsViewController: UIViewController {

@IBOutlet weak var goalTableView: UITableView!
@IBOutlet weak var goalCategoryLabel: UILabel!

var valueToPass = ""
var goals: [String] = []
let theEmptyModel: [String] = ["No data in this section."]

var firstGoals = ["run", "walk", "jog"]
var secondGoals = ["sleep", "rest"]

var goalCategoryText: String = ""

override func viewDidLoad() {
    super.viewDidLoad()

    goals = firstGoals
    goalCategoryLabel?.text = goalCategoryText
    goalTableView.delegate = self
    goalTableView.dataSource = self
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "firstGoalsSegue" {
        if goalCategoryText == "First Goals" {
            let viewController = segue.destination as! GoalsViewController
            viewController.firstGoals.append(valueToPass)
        }
    }
    if segue.identifier == "secondGoalsSegue" {
        if goalCategoryText == "Second Goals" {
            let viewController = segue.destination as! GoalsViewController
            viewController.secondGoals.append(valueToPass)
        }
    }

}

extension GoalsViewController: UITableViewDelegate, UITableViewDataSource {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return goals.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "GoalsCell_1", for: indexPath)
    cell.textLabel?.text = goals[indexPath.row]
    cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping
    cell.textLabel?.numberOfLines = 3
    return cell
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return "\(sectionHeader)"
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    valueToPass = goals[indexPath.row]
    performSegue(withIdentifier: "firstGoalsSegue", sender: self)
    performSegue(withIdentifier: "secondGoalsSegue", sender: self)
    tableview.reloadData()
}
}

Вот моя раскадровка. Storyboard

В настоящее время при выборе кнопки я попадаю на экран просмотра таблицы, на котором отображаются только пустые ячейки. Как мне исправить свой код, чтобы значения firstGoals и secondGoals передавались в tableview при нажатии соответствующей кнопки?

1 Ответ

1 голос
/ 27 мая 2020

Вам необходимо установить GoalTableView s delegate и dataSource на GoalsViewController, например:

override func viewDidLoad() {
    super.viewDidLoad()

    goals = ["goal 1", "goal 2", "goal 3"]
    goalCategoryLabel?.text = goalCategoryText
    GoalTableView.delegate = self
    GoalTableView.dataSource = self
    GoalTableView.reloadData()
}

Совет: постарайтесь сохранить имена, начинающиеся с маленькой буквы, для экземпляров, в этом случае переименуйте GoalTableView в goalTableView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...