Заголовок пользовательского раздела UITableView - PullRequest
0 голосов
/ 06 декабря 2018

Я хочу добавить к своим UITableView несколько пользовательских заголовков разделов, я искал в Интернете и увидел, что многие люди создают подкласс UITableViewCell и регистрируют его в качестве заголовка, это звучит как плохая практика, так как естьопределенный класс для верхних и нижних колонтитулов называется UITableViewHeaderFooterView.

Итак, я попытался сделать это сам, я создал XIB-файл и подкласс UITableViewHeaderFooterView - SelectedProductsSectionHeader.

Вот как я подключил свои розетки enter image description here enter image description here enter image description here

Вот соответствующиекод на стороне UITableViewController-

override func viewDidLoad() {
    super.viewDidLoad()

    let selectedProductsSectionHeaderNib = UINib(nibName: "SelectedProductsSectionHeader", bundle: nil)
    tableView.register(selectedProductsSectionHeaderNib, forHeaderFooterViewReuseIdentifier: "selectedProductsHeader")
}

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    if section == SectionIndex.selectedProducts{

        let selectedProductsHeaderCell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "selectedProductsHeader") // throws error
        guard let selectedProductsHeader = selectedProductsHeaderCell as? SelectedProductsSectionHeader else { return nil }

        return selectedProductsHeader
    }

    return nil
}

Ошибка времени выполнения:

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

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

enter image description here enter image description here enter image description here

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

1 Ответ

0 голосов
/ 29 апреля 2019

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

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

...