Как правильно создать пользовательскую ячейку с файлом xib, зарегистрироваться и загрузить ее? - PullRequest
0 голосов
/ 01 ноября 2018

хочу

для создания пользовательской ячейки таблицы, добавления всех компонентов и регистрации ее

Я сделал

Я создал эти файлы ниже:

enter image description here

PlaceDetailCell.xib с id из customPlaceDetailCell

enter image description here

CustomPlaceDetailCell.swift

import UIKit

class CustomPlaceDetailCell: UITableViewCell {

    @IBOutlet weak var country: UILabel!
    @IBOutlet weak var address: UILabel!
    @IBOutlet weak var distance: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }


    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

Я регистрируюсь

//register xib file
    placesTable.register(UINib(nibName: "PlaceDetailCell", bundle: nil), forCellReuseIdentifier: "customPlaceDetailCell")

Это мой cellForRowAt

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

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

    if places[indexPath.row]["name"] != nil {
        cell.textLabel?.text = places[indexPath.row]["name"]! + " (" + distances[indexPath.row] + " miles)"
    }

    return cell
}

Я получил

сбой при нажатии на эту ячейку, даже если приложение успешно выполнено.

Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, соответствующему кодированию для адреса ключа». *** Первый вызов стека вызовов:

Надеюсь

кто-то может дать мне совет, как поступить правильно.

1 Ответ

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

Вам необходимо установить пользовательский класс файла xib для класса, который вы его преобразовали в

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

так как кажется, что имя xib PlaceDetailCell с классом PlaceDetailCell и вы приведете его к CustomPlaceDetailCell

если вы зарегистрируете это

 placesTable.register(UINib(nibName: "PlaceDetailCell", bundle: nil), forCellReuseIdentifier: "customPlaceDetailCell")

тогда пользовательский класс xib должен быть установлен на CustomPlaceDetailCell, а не на PlaceDetailCell, что, как и всегда, ожидается, что имя xib = это имя класса, которое вы создаете, а затем хотите изменить имя класса

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