Установить массив строк в tableViewCell - PullRequest
0 голосов
/ 11 ноября 2018

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

Мой TableViewController:

let subjectsDict = ["Spanish": ["Lesson 1", "Lesson 2"], "Math":["Problem set 1", "Problem set 2"], "Science": ["Lab"]]

let subjectArray = ["Spanish", "Math", "Science"]

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "subjectCell", for: indexPath) as? SubjectTableViewCell else {
        return UITableViewCell()
    }

    cell.subjectList = subjectsDict[subjectArray[indexPath.row]]

    return cell
}

И мой tableViewCell выглядит следующим образом.

class subjectTableViewCell: UITableViewCell {
        var subjectList: [String] = []

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style , reuseIdentifier: reuseIdentifier)
        setUpTable()
    }
    required init?(coder decoder: NSCoder) {
        super.init(coder: decoder)
    }
    override func awakeFromNib() {
        super.awakeFromNib()
        setUpTable()
    }
    func setUpTable() {
        print(subjectList)
    }
        //other code for creating the cell
}

Но когда я распечатываю subjectList из subjectTableViewCell, он печатает none

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Ваш код не пытается обновить содержимое ячейки со значением subjectList. Все, что вы показываете, это print.

Также обратите внимание, что ваш print вызывается до того, как предпринята попытка установить subjectList. И помните, что клетки используются повторно. setUpTable будет вызываться только один раз, но subjectList будет устанавливаться снова и снова, когда ячейка будет использоваться.

Самое простое решение - обновить ячейку, когда установлен subjectList.

var subjectList: [String] = [] {
    didSet {
        textLabel?.text = subjectList.joined(separator: ", ")
    }
}

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

0 голосов
/ 11 ноября 2018

Вы пытаетесь напечатать subjectList в тот момент, когда вы инициализируете ячейку табличного представления, поэтому в данный момент вы еще не установили subjectList. Если вы хотите напечатать subjectList, вы можете сделать это после того, как установите его.

После выполнения этой строки:

cell.subjectList = subjectsDict[subjectArray[indexPath.row]]
0 голосов
/ 11 ноября 2018

Если вы просто хотите вызвать setUpTable(), когда ваш subjectList в ячейке обновится, попробуйте использовать:

var subjectList: [String] = [] {
    didSet {
        setUpTable()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...