Как использовать пользовательский UITableViewCell с XIB без UITableView - PullRequest
0 голосов
/ 25 января 2020

Я создал пользовательский UITableViewCell с именем CustomTableViewCell, имеющий xib.

Код для CustomTableViewCell выглядит следующим образом -

class CustomTableViewCell: UITableViewCell {
    @IBOutlet weak var label1: UILabel!
}

В UITableViewController, Я использую CustomTableViewCell следующим образом -

  • в viewDidLoad(), вызывается register(_:forCellReuseIdentifier:).

  • в tableView(_:cellForRowAt:) функции , вызывается dequeueReusableCell(withIdentifier:for:) и устанавливается текст для label1.

Код работает, как ожидалось, и CustomTableviewCell отображается при запуске приложения.

Есть еще один кастом UIViewController с xib. К этому файлу XIB я хотел бы добавить CustomTableViewCell в качестве подпросмотра.

Я добавил UIView в xib и установил его класс CustomTableViewCell. При запуске приложения происходит сбой, поскольку label IBOutlet равен nil.

Кто-нибудь может указать, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 25 января 2020

Чтобы добавить пользовательскую UIViewcell, вы можете создать uiviewcell, используя xib, и дать определенной ячейке многократно используемый идентификатор .. затем использовать эту конкретную ячейку uiview при определении tableviewcell в uiviewcontroller.

1 голос
/ 25 января 2020

То, что вы пытаетесь сделать, достижимо, но по-другому. Ячейки UITableView автоматически создаются только UITableViews. Таким образом, установка имени класса не будет создавать экземпляр CustomTableViewCell.

Решение заключается в следующем: все ячейки UITableView являются подклассом UIView, поэтому мы можем сами создать экземпляр ячейки CustomTableView через nib и программно добавить представление в контейнер, который мы можем поместить в UIViewController.

Вот код, который может вам помочь.

import UIKit

class ViewController: UIViewController {
   @IBOutlet weak var containerView: UIView!

   override func viewDidLoad() {
     super.viewDidLoad()

     let nib = UINib(nibName: String(describing: CustomTableViewCell.self), bundle: nil)
     if let customTableViewCell = nib.instantiate(withOwner: self, options: nil).first as? CustomTableViewCell {
        customTableViewCell.label1.text = "Hello"
        containerView.addSubview(customTableViewCell)
     }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...