Почему UITableViewCell должен быть зарегистрирован? - PullRequest
0 голосов
/ 21 мая 2018

это все коды в моей демонстрации:

import UIKit

class TableViewController: UITableViewController {

    var numberOfCell = 0

    @IBAction func addAction() {
        numberOfCell = numberOfCell + 1
        tableView.reloadData()
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return numberOfCell + 1
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.section == 0 {
            if indexPath.row == 0 {
                let cell = tableView.dequeueReusableCell(withIdentifier: "FirstCell", for: indexPath)
                let addButton = cell.viewWithTag(99) as! UIButton
                return cell
            } else {
                let cell = tableView.dequeueReusableCell(withIdentifier: "SecondCell", for: indexPath)
                let deleteButton = cell.viewWithTag(100) as! UIButton
                let textField = cell.viewWithTag(101) as! UITextField
                return cell
            }
        } else {
            return super.tableView(tableView, cellForRowAt: indexPath)
        }
    }
}

Я установил идентификатор ячеек в Инспекторе атрибутов в файле раскадровки, не зарегистрировал ячейки, все идет так:

Нажмите кнопку «Добавить», покажите новую ячейку с кнопкой и текстовым полем.

Но в моем проекте я использую то же самое, когда я нажимаю кнопку «Добавить», приложение вылетает,и сообщить об этой ошибке:

*** Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «невозможно заблокировать ячейку с идентификатором SecondCell - необходимо зарегистрировать перо или класс для идентификатора илиподключить ячейку прототипа к раскадровке '

Я пытался зарегистрировать ячейку, используя этот код:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "SecondCell")

Но если я это сделаю, приложение вылетит на let deleteButton = cell.viewWithTag(100) as! UIButton иlet textField = cell.viewWithTag(101) as! UITextField потому что их ноль.

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

1 Ответ

0 голосов
/ 21 мая 2018

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

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