У меня есть UITableViewController с одной ячейкой прототипа в нем. В ячейке есть метка и текстовое поле, а ее класс установлен на InputCell. Когда табличное представление загружается, ячейка кажется удаленной, но отображается как пустая ячейка по умолчанию.

Я проверил следующие вещи:

  • Класс TableViewController установлен в мой подкласс TableViewController (ControlSettingsView)
  • TableViewController является делегатом TableView и источником данных
  • Пользовательская ячейка имеет свой класс, установленный в мой подкласс UITableViewCell (Входная ячейка)
  • Идентификатор повторного использования пользовательских ячеек установлен на «input_cell», и это соответствует идентификатору, используемому в моем TableViewController.
  • Убедитесь, что метка и текстовое поле находятся в представлении содержимого моих ячеек, а не в самой ячейке.
  • Ограничения для представлений в моей камере выглядят разумными.
  • Установите красный фон для ячеек, чтобы он выделялся, чтобы проверить, не видны ли метка и текстовое поле, но была ли правильно очищена ячейка.

Функция, которая переходит к моему представлению настроек из корневого контроллера представления

func gototSettingsFor(control: EditableUIElement) {
        let v = ControlSettingsView()
        self.navigationController?.pushViewController(v, animated: true)
    }

ControlSettingsView.swift

class ControlSettingsView: UITableViewController {

    let INPUT_CELL: String = "input_cell"

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(InputCell.self, forCellReuseIdentifier: INPUT_CELL)
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch (section) {
        case 0:
            return 5
        default:
            return 0
        }
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        switch (indexPath.section) {
        case 0:
            let cell: InputCell = tableView.dequeueReusableCell(withIdentifier: INPUT_CELL, for: indexPath) as! InputCell
            return cell
        default:
            return tableView.dequeueReusableCell(withIdentifier: INPUT_CELL, for: indexPath)
        }
    }
}

InputCell.swift

class InputCell: UITableViewCell {

    @IBOutlet weak var cell_input: UITextField!
    @IBOutlet weak var cell_title: UILabel!

}

Я ожидал, что 5 из моих пользовательских ячеек представления таблицы будут отображаться в представлении таблицы, однако я просто получаю 5 пустых ячеек, я вижу, что ячейки есть, потому что если я нажму на них, их можно будет выбрать.

Я не могу понять, почему это должно быть, что ячейка не пользовательская ячейка, а пустая.

4
Chip 9 Май 2019 в 18:13

2 ответа

Лучший ответ

У вас есть контроллер табличного представления и ячейка прототипа в раскадровке. Но вы создаете контроллер представления программно

let v = ControlSettingsView()

Таким образом, свойства ячейки прототипа будут равны нулю. Создайте экземпляр контроллера представления, используя идентификатор раскадровки

Убедитесь, что вы установили идентификатор раскадровки ControlSettingsView для контроллера представления

if let vc = self.storyboard?.instantiateViewController(withIdentifier: "ControlSettingsView") as? ControlSettingsView {
    self.navigationController?.pushViewController(vc, animated: true)
}

И не используйте регистр (_: forCellReuseIdentifier :), если у вас есть ячейка таблицы в раскадровке.

4
RajeshKumar R 9 Май 2019 в 15:34

Поскольку вы не установили никаких свойств для ячейки, ничего не отображается, кроме пустой ячейки. Рассмотрим ваш следующий код:

let cell: InputCell = tableView.dequeueReusableCell(withIdentifier: INPUT_CELL, for: indexPath) as! InputCell
return cell

Что вы делаете сейчас . В настоящее время вы получаете ячейку, находящуюся в очереди, и возвращаете ее. Однако вы не установили никаких свойств ячейки.

Что нужно сделать: вам необходимо установить некоторые свойства, например текст или изображения, например:

cell.textLabel = "MY TEXT HERE"

Или в вашем случае вы можете сделать это из-за своего InputCell:

cell.cell_title = "MY TEXT HERE"
0
George_E 9 Май 2019 в 15:21