Как инициализировать вещи пользовательского интерфейса при повторном использовании UITableViewCell - PullRequest
0 голосов
/ 28 апреля 2019

Я хочу повторно использовать UITableViewCell в своем приложении, но я получаю эту ошибку: неожиданно обнаружен ноль при неявном развертывании необязательного значения.

Я считаю, что это связано с тем, что пользовательский интерфейс в UITableViewCell равен нулю, поэтому мое приложение упало.

Мой UITableViewCell код выглядит так:

class WordListCell: UITableViewCell {

    @IBOutlet weak var wordListCoverImage: UIImageView!
    @IBOutlet weak var wordListName: UILabel!
    @IBOutlet weak var wordListInfo: UILabel!

    var wordList: WordList? {
        didSet {
            updateUI()
        }
    }

    private func updateUI() {
        wordListName.text = wordList?.name
        wordListInfo.text = wordList?.description
        wordListCoverImage = UIImage()
    }
}

Я создаю его в storyboard и связываю outlet с кодом в другом TableView.

Но на этот раз я хочу повторно использовать ячейку в новом TableView, который все создан кодом, поэтому я не знаю, как инициализировать вещи пользовательского интерфейса.

Новый UITableView код выглядит так:

tableView.delegate = self
tableView.dataSource = self
tableView.register(WordListCell.self, forCellReuseIdentifier: "wordListCell")

//the delegate
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let wordList = wordLists[indexPath.row]

    let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath)
    if let wordListCell = cell as? WordListCell {
        wordListCell.wordList = wordList
    }

    return cell
}

Подскажите, пожалуйста, как повторно использовать ячейку. Спасибо!

1 Ответ

1 голос
/ 28 апреля 2019

Хорошо, я думаю, что вы делаете неправильно, когда вы создаете пользовательскую ячейку tableView, вы не назначаете UIImage. Так что вместо этого попробуйте сделать это wordListCoverImage = UIImage(named: wordList.imageName).

Теперь также в вашем классе tableView внутри viewDidLoad (), кроме добавления

tableView.delegate = self
tableView.dataSource = self
tableView.register(WordListCell.self, forCellReuseIdentifier: "wordListCell")

Затем на let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath) понижаем его как пользовательский класс ячейки, как это.

let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath) as! WordListCell

И, наконец, под этим набором cell.delegate = self

Надеюсь, это поможет!

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