单击 tableView 后隐藏 xib 的自定义 UITableViewCell
Custom UITableViewCell with xib hiding after click on tableView
我正在尝试以编程方式使用 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()
}
}
问题与对 viewModel
的弱引用有关。
将viewModel
变量传给控制器class如下:
class HomeViewController {
var viewModel: HomeViewModel!
...
func setupTableView() {
self.viewModel = HomeViewModel()
...
}
}
我正在尝试以编程方式使用 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()
}
}
问题与对 viewModel
的弱引用有关。
将viewModel
变量传给控制器class如下:
class HomeViewController {
var viewModel: HomeViewModel!
...
func setupTableView() {
self.viewModel = HomeViewModel()
...
}
}