【问题标题】:Custom UITableViewCell with xib hiding after click on tableView单击tableView后隐藏xib的自定义UITableViewCell
【发布时间】:2019-12-03 18:34:04
【问题描述】:

我正在尝试使用 UITableView 以编程方式构建一个带有自定义单元格的 tableView,而不使用 Storyboard,但是在我完成教程并尝试运行我构建的 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()
    }

}

【问题讨论】:

    标签: ios swift uitableview xcode11


    【解决方案1】:

    问题与对viewModel的弱引用有关。

    viewModel变量放入控制器类,如下:

    class HomeViewController {
    
      var viewModel: HomeViewModel!
      ...
    
      func setupTableView() {
          self.viewModel = HomeViewModel()
          ...
      }
    }
    

    【讨论】:

    • 是的,你是对的,它是相关的,但是在我将 viewModel 变量更改为var viewModel: HomeViewModel! 之后,即使没有点击,单元格也会停止显示,但是当我尝试将委托和数据源扩展直接添加到 HomeViewController 并连接表数据源时并委托给自己,它工作正常吗?
    • 但是fileprivate let viewModel = ProfileViewModel() 可以正常工作,谢谢
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多