JDK92
JDK92

Reputation: 96

Custom TableViewCells do not show up

So I am pretty new to iOS development. I try to create everything programmatically so my Storyboard is empty. I'm currently trying to get a TableView with custom cells. The TableView is running and looking fine when I use the standard UITableViewCell. I created a very simple class called "GameCell". Basically, I want to create a cell here with multiple labels and maybe some extra UIObjects in the future (imageView etc.). For some reason, the custom cells do not show up.

Game cell class:

class GameCell: UITableViewCell {

    var mainTextLabel = UILabel()
    var sideTextLabel = UILabel()

    func setLabel() {
        self.mainTextLabel.text = "FirstLabel"
        self.sideTextLabel.text = "SecondLabel"
    }
}

Here the additional necessary code to get the number of rows and return the cells to the TableView which I have in my ViewController. self.lastGamesCount is just an Int here and definitely not zero when I print it.

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return self.lastGamesCount
        }

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: cellID) as! GameCell

In my viewDidLoad() I register the cells like this:

tableView.register(GameCell.self, forCellReuseIdentifier: cellID)

When I run everything the Build is successful I can see the navigation bar of my App and all but the TableView is empty. I go back to the normal UITableViewCell and the cells are showing up again. What am I missing here? Any help is appreciated.

Thanks!

Upvotes: 0

Views: 61

Answers (1)

Shehata Gamal
Shehata Gamal

Reputation: 100503

The problem is you need to set constraints for these labels

var mainTextLabel = UILabel()
var sideTextLabel = UILabel()

after you add them to the cell

class GameCell: UITableViewCell {

    let mainTextLabel = UILabel()
    let sideTextLabel = UILabel()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setLabel()
    }
    func setLabel() { 
        self.mainTextLabel.translatesAutoresizingMaskIntoConstraints = false
        self.sideTextLabel.translatesAutoresizingMaskIntoConstraints = false 
        self.contentView.addSubview(mainTextLabel)
        self.contentView.addSubview(sideTextLabel) 
        NSLayoutConstraint.activate([  
            mainTextLabel.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor), 
            mainTextLabel.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor), 
            mainTextLabel.topAnchor.constraint(equalTo: self.contentView.topAnchor,constant:20), 
            sideTextLabel.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor), 
            sideTextLabel.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor), 
            sideTextLabel.topAnchor.constraint(equalTo: self.mainTextLabel.bottomAnchor,constant:20), 
            sideTextLabel.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor,constant:-20)
        ])
        self.mainTextLabel.text = "FirstLabel"
        self.sideTextLabel.text = "SecondLabel"
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    } 
}

Upvotes: 1

Related Questions