Пользовательский UITableViewCell с xib, скрывающимся после нажатия на tableView

Я пытаюсь создать tableView с пользовательской ячейкой, используя UITableView программно, без использования раскадровки, но после того, как я закончу учебник и попытаюсь запустить приложение CustomCell, которое я создаю,

Пользовательская ячейка отображается, но как только я нажимаю tableView, пользовательская ячейка скрывается

Может кто-нибудь проверить, если я что-то пропустил? А может неправильно использовать xib с программно сделанным tableView?

HomeViewController.swift

class HomeViewController: UIViewController {

    fileprivate let homeTableView: UITableView = {
        let htm = UITableView()
        htm.translatesAutoresizingMaskIntoConstraints = false
        return htm
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        homeTableView.register(CusTableViewCell.nib, forCellReuseIdentifier: CusTableViewCell.identifier)

        setupTableView()

    }

    func setupTableView() {

        let viewModel = HomeViewModel()
        homeTableView.delegate = viewModel
        homeTableView.dataSource = viewModel

        homeTableView.rowHeight = 100

        view.addSubview(homeTableView)

        // homeTableView.separatorStyle = .none

        homeTableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
        homeTableView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0).isActive = true
        homeTableView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0).isActive = true
        homeTableView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 0).isActive = true

    }

}

CusTableViewCell.swift

class CusTableViewCell: UITableViewCell {

    @IBOutlet weak var nameLabel: UILabel!

    static var nib:UINib {
        return UINib(nibName: identifier, bundle: nil)
    }

    static var identifier: String {
        return String(describing: self)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code

        nameLabel.text = "Something"
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

HomeViewModel.swift

extension HomeViewModel: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: CusTableViewCell.identifier, for: indexPath) as? CusTableViewCell {
            cell.backgroundColor = UIColor(red:0.17, green:0.73, blue:0.83, alpha:1.0)
            return cell
        }
        return UITableViewCell()
    }

}

person AhmedEls    schedule 03.12.2019    source источник


Ответы (1)


Проблема связана со слабой ссылкой на viewModel.

Поместите переменную viewModel в класс контроллера следующим образом:

class HomeViewController {

  var viewModel: HomeViewModel!
  ...

  func setupTableView() {
      self.viewModel = HomeViewModel()
      ...
  }
}
person Alexander Volkov    schedule 03.12.2019
comment
Да, вы правы, это связано, но после того, как я изменил переменную viewModel на var viewModel: HomeViewModel!, ячейки перестают отображаться даже без щелчка, но когда я попытался добавить расширение делегата и источника данных непосредственно в HomeViewController и подключить таблицу dataSource и делегировать к себе, все работает нормально? - person AhmedEls; 03.12.2019
comment
но с fileprivate let viewModel = ProfileViewModel() работает нормально, спасибо - person AhmedEls; 03.12.2019