Не удается зарегистрировать TableCell TableViews, созданных в UIViewController программно - PullRequest
1 голос
/ 05 октября 2019

Я создал TableView в стандартном ViewController. Проблема в том, что я не могу зарегистрировать новую ячейку. Это всегда приводит к следующей ошибке:
'невозможно удалить из очереди ячейку с идентификатором CustomCell - необходимо зарегистрировать перо или класс для идентификатора или подключить ячейку-прототип в раскадровке'

class ViewController: UIViewController {

var testView = UITableView()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(testView)

        self.testView.register(CustomCell.self, forCellReuseIdentifier: "CellID")

        self.testView.dataSource = self
        self.testView.delegate = self
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let item = self.item(at: indexPath)
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath) as! CustomCell
    cell.titleLabel.text = item
    cell.coverView.image = UIImage(named: "Swift")
    return cell
}

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

Я пытался зарегистрировать ячейки, используя другой Navigationcontroller: UITableViewController. Это просто работало, потому что я использовал:

self.tableView.register(Cellstest.self, forCellReuseIdentifier: "CellID")

//and not using the created TableView "testView". 
//Using self.testView.register  leads to the same error

В моем мнении с кодом выше я зарегистрировал ячейки для универсального tableView в UITableViewController вместо моего созданного testView: UITableView.

Если я прав, как я могу просто зарегистрировать новую ячейку для определенного TableView

Если я не прав, как я могу получить доступ к UITableViewController в моем UIViewController. Потому что в первом случае с помощью UIViewController я не могу получить доступ self.tableView.register . Я просто могу зарегистрировать свой собственный TableView self.testView.register

Ответы [ 3 ]

1 голос
/ 05 октября 2019

Вы используете файл XIB, затем необходимо зарегистрировать Nib объект в testView в методе viewDidLoad().

, пожалуйста, замените: -

self.testView.register(UINib(nibName: "nib file name", bundle: nil), forCellReuseIdentifier: "cell identifier")

на: -

self.testView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
1 голос
/ 06 октября 2019

Я нашел свою проблему. Я сделал ошибку в своей камере. Декларация была неясной, и поэтому я всегда регистрировал достаточно 1001 *

1 голос
/ 05 октября 2019

Вы пытались использовать

self.testView.register(CustomCell.self, forCellReuseIdentifier: "CustomCell")

вместо

self.testView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...