user11209250
user11209250

Reputation:

How to set tableview style to have subtitle programmatically while having dequeueReusableCell?

I want my tableView to have subtitle as well as being able to dequeue properly. I have referred to this link but it does not work for my code. What should I do?

My code is currently like this:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        //Calling tableview for a reusable cell here will always return a cell
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel?.text = developerArray[indexPath.row].developerName
        cell.detailTextLabel?.text = developerArray[indexPath.row].developerHP

        return cell
    }

Upvotes: 0

Views: 1148

Answers (3)

J Erasmus
J Erasmus

Reputation: 64

So first of all, did you create your table using storyboard or code?

Either way you need to make sure you set the datasource and delegate to self, provided the class they are in conforms to :
UITableViewDataSource
and
UITableViewDelegate

myTable?.delegate = self
myTable?.dataSource = self

Also make sure you register your cell

myTable?.register(myCell.self, forCellReuseIdentifier: "myCell")

And when declaring your cell, you need to force it as the type

let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! myCell

Below is a working sample of tableview with a created cell. I hope this helps.

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    // Create the tableview object
    var myTable:UITableView?

    override func viewDidLoad() {
        // Set the size and location of the tableview
        myTable = UITableView(frame: CGRect(x: 0, y: 0, width: 300, height: 600))
        // register your cell
        myTable?.register(myCell.self, forCellReuseIdentifier: "myCell")
        // set the background color of the table, note this wont make a difference unless the cell background is changed.
        myTable?.backgroundColor = UIColor.clear
        // set the datasource and delegate to self
        myTable?.delegate = self
        myTable?.dataSource = self
        // This is jsut for style, wether there should be seperators or not, and if the user can select multiple lines
        myTable?.separatorStyle = .none
        myTable?.allowsMultipleSelection = true
        // Add the table to your view
        self.view.addSubview(myTable!)
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // This is declaring how many rows you want in your table. I have 1 but you can do it according to the size of your array.
        return 1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // create the cell
        let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! myCell

        // set the title text for this cell
        cell.title.text = "HelloWorld"

        // return the cell
        return cell
    }
}

and this is the class for the cell we referenced above.

class myCell: UITableViewCell {


    var title = UILabel()
    var detail = UILabel()


    override func awakeFromNib() {
        super.awakeFromNib()
    }



    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        title.font = UIFont.boldSystemFont(ofSize: 16)
        title.textAlignment = .center
        self.contentView.addSubview(title)
        self.contentView.addSubview(detail)

    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }


    override func layoutSubviews() {
        super.layoutSubviews()
        title.frame = CGRect(x: self.contentView.frame.width / 2 - 200, y: 6, width: 400, height: 20)
        detail.frame = CGRect(x: 150, y: 10, width: 280, height: 20)
    }
}

Let me know if this helps. if you are doing it from story board let me know and I'll adjust.

Upvotes: 0

Prajnaranjan Das
Prajnaranjan Das

Reputation: 1428

You can create custom cell using nib by adding labels

For creating custom cell refer this link: Custom UITableViewCell from nib in Swift

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

    let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell

    cell.title.text = yourTitleArray[indexPath.row]
    cell.detailLbl.text = yourDetailArray[indexPath.row]

    return cell
}

Upvotes: 0

Rohit Parihar
Rohit Parihar

Reputation: 352

Swift 5

//Declare the variable cell Identifier

let reuseCellIdentifier = “cellIdentifier”;

//Implementation of cellForRowAt

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

    var cell = tableView.dequeueReusableCell(withIdentifier: reuseCellIdentifier)
    if (!(cell != nil)) {

        cell = UITableViewCell(style: .subtitle, reuseIdentifier: reuseCellIdentifier)
    }

    cell?.textLabel?.text = //Title text
    cell?.detailTextLabel?.text = //Subtitle text

    return cell!
}

Upvotes: 3

Related Questions