69204


現在、チャット一覧画面を作成しているのですが、セルが表示されず困っています。。

とても単純なミスだとは思うのですが、ご教授お願いいたします。

[現在のコード]

[code]

    //
    //  ChatListVC.swift
    //
    
    import UIKit
    
    let screensize = UIScreen.main.bounds
    
    class ChatListVC: UIViewController {
        
        var chatListTableView = UITableView()
        var chatmember = ["a","b","c","d"]
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            self.view.backgroundColor = .white
            
            chatListTableView.delegate = self
            chatListTableView.dataSource = self
            
            self.setup()
        }
        
    }
    
    
    extension ChatListVC: UITableViewDelegate,UITableViewDataSource{
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 20
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "ChatListCell", for: indexPath) as! ChatListCell
            cell.backgroundColor = .red
            
            return cell
        }
        
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return screensize.height/15
        }
        
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            
        }
        
    }
    
    
    extension ChatListVC{
        
        override func viewWillLayoutSubviews() {
            super.viewWillLayoutSubviews()
            
            self.view.addSubview(chatListTableView)
        }
        
        private func setup(){
            self.setupTableView()
        }
        
        private func setupTableView(){
            chatListTableView = UITableView(frame: CGRect(x: 0, y: 0, width: screensize.width, height: screensize.height), style: .plain)
            chatListTableView.register(ChatListCell.classForCoder(), forCellReuseIdentifier: "ChatListCell")
            chatListTableView.tableFooterView = UIView()
        }
        
        
    }
    
[/code]

[cellのコード]

[code]

    import UIKit
    
    
    class ChatListCell: UITableViewCell {
        
        let nameLbl = UILabel()
        let talkLbl = UILabel()
        let profileImageView = UIImageView()
    
        override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
            super.init(style: style, reuseIdentifier: reuseIdentifier)
            self.setup()
        }
        
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        override func prepareForReuse() {
            super.prepareForReuse()
        }
        
        override func layoutSubviews() {
            super.layoutSubviews()
            
            self.addSubview(nameLbl)
            self.addSubview(profileImageView)
            self.addSubview(talkLbl)
        }
        
        func register(_ cellClass: AnyClass?,forCellReuseIdentifier identifier: String){
            
        }
        
        private func setup(){
            nameLbl.backgroundColor = .yellow
            nameLbl.frame = CGRect(x: 100, y: 20, width: 300, height: 50)
            nameLbl.text = "fnadifiafia"
            nameLbl.textColor = .black
            talkLbl.backgroundColor = .blue
            talkLbl.frame = CGRect(x: 100, y: 50, width: 300, height: 50)
            profileImageView.backgroundColor = .red
            profileImageView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
    
        }
        
    }
    
[/code]


CC BY-SA 4.0
2020-08-03T07:40:38.173
69201
2020-08-03T09:27:10.070
2020-08-03T09:27:10.070
36055
36055
question
swift ios swift5
tableviewCellが表示されません


`viewDidLoad` で `chatListTableView` にデリゲートとデータソースを設定していますが、その後、
`setupTableView` で新しいUITableViewのインスタンスを作って、それが `viewWillLayoutSubviews`
で親Viewに追加されています。

つまり、実際に View 上に配置されたテーブルビューはデータソースが無いので何も表示されません。

`viewDidLoad` と `setupTableView` を以下のようにし、`viewWillLayoutSubviews`
のオーバーライドを削除したらセルが表示されるでしょう。

[code]

        override func viewDidLoad() {
            super.viewDidLoad()
            
            self.view.backgroundColor = .white
            
            self.view.addSubview(chatListTableView)
            self.setupTableView()
        }
    
[/code]

[code]

        private func setupTableView(){
            chatListTableView = UITableView(frame: self.view.bounds, style: .plain)
            chatListTableView.delegate = self
            chatListTableView.dataSource = self
            chatListTableView.register(ChatListCell.classForCoder(), forCellReuseIdentifier: "ChatListCell")
            chatListTableView.tableFooterView = UIView()
            self.view.addSubview(chatListTableView)
        }
    
[/code]

（ ChatListCell のコードにもいくつか問題がありそうですが、とりあえずTableView側のみを指摘します ）


CC BY-SA 4.0
2020-08-03T08:43:10.603
69204
2020-08-03T08:43:10.603
23829
69201
answer