Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 单击tableView后隐藏xib的自定义UITableViewCell_Ios_Swift_Uitableview_Xcode11 - Fatal编程技术网

Ios 单击tableView后隐藏xib的自定义UITableViewCell

Ios 单击tableView后隐藏xib的自定义UITableViewCell,ios,swift,uitableview,xcode11,Ios,Swift,Uitableview,Xcode11,我正在尝试使用UITableView以编程方式构建一个带有自定义单元格的tableView,而不使用故事板,但在我完成教程并尝试运行我构建的自定义单元格应用程序之后 自定义单元格显示,但单击tableView后,自定义单元格将隐藏 有人能检查一下我是否遗漏了什么吗? 或者将xib与编程生成的tableView一起使用是错误的 HomeViewController.swift class HomeViewController: UIViewController { fileprivate

我正在尝试使用UITableView以编程方式构建一个带有自定义单元格的tableView,而不使用故事板,但在我完成教程并尝试运行我构建的自定义单元格应用程序之后

自定义单元格显示,但单击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

    }

}
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
    }

}
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()
    }

}
CusTableViewCell.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

    }

}
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
    }

}
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()
    }

}
HomeViewModel.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

    }

}
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
    }

}
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
变量放入控制器类,如下所示:

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

是的,你是对的,这是相关的,但在我将viewModel变量更改为
var viewModel:HomeViewModel之后单元格即使未单击也会停止显示,但当我尝试将委托和数据源扩展直接添加到HomeViewController并将表数据源和委托连接到self时,它工作正常?但是使用
fileprivate let viewModel=ProfileViewModel()
工作正常,谢谢