Почему мой пользовательский UITableViewCell отображается неправильно? - PullRequest
4 голосов
/ 09 мая 2019

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

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

  • Класс TableViewController установлен в мойПодкласс TableViewController (ControlSettingsView)
  • TableViewController является делегатом и источником данных TableView
  • Для пользовательской ячейки установлен свой класс для моего подкласса TableViewCell (InputCell)
  • Пользовательские ячейкидля идентификатора повторного использования установлено значение «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 пустых ячеек, я вижу, что ячейки есть, потому что, если я нажму на них, они могут быть выбраны.

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

Ответы [ 2 ]

4 голосов
/ 09 мая 2019

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

let v = ControlSettingsView()

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

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

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

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

0 голосов
/ 09 мая 2019

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

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...