单击tableView后隐藏xib的自定义UITableViewCell
Posted
技术标签:
【中文标题】单击tableView后隐藏xib的自定义UITableViewCell【英文标题】:Custom UITableViewCell with xib hiding after click on tableView 【发布时间】: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()
【问题讨论】:
【参考方案1】:问题与对viewModel
的弱引用有关。
将viewModel
变量放入控制器类,如下:
class HomeViewController
var viewModel: HomeViewModel!
...
func setupTableView()
self.viewModel = HomeViewModel()
...
【讨论】:
是的,你是对的,它是相关的,但是在我将 viewModel 变量更改为var viewModel: HomeViewModel!
之后,即使没有点击,单元格也会停止显示,但是当我尝试将委托和数据源扩展直接添加到 HomeViewController 并连接表数据源时并委托给自己,它工作正常吗?
但是fileprivate let viewModel = ProfileViewModel()
可以正常工作,谢谢以上是关于单击tableView后隐藏xib的自定义UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章