ios tableview example for displaying list of items

Contact.swift, this will be the data to be displayed in each row in the table view.

import Foundation
struct Contact {
    var name: String
    var title: String
}

DataFactory.swift, this is a factory class to create a list of data items for displaying in the tableview.

import Foundation
class DataFactory {
    static func generatContacts() -> [Contact] {
        var contacts: [Contact] = []
        
        for index in 0...30 {
            contacts.append(Contact(name: "name\(index)", title: "title \(index)"))
        }
        
        return contacts
    }
}

ContactTableViewCell.swift, this is the view class which models the views in the table cell. We are going to display an UIImageView, and two UILabels in each table cell. Hence, we have defined an UIImageView and two UILabels in this view class.

import UIKit

class ContactTableViewCell: UITableViewCell {
    @IBOutlet weak var portraitImageView: UIImageView!
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var titleLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

ContactTableViewController.swift, the tableview controller implementation for displaying a simple list of contacts. let cellIdentifier = "tableCell" this tableCell is defined in the storyboard, and it is used to find each table cell and renders the data in it.

import UIKit

class ContactTableViewController: UITableViewController {
    
    var contacts: [Contact] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        contacts = DataFactory.generatContacts()
    }

    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {
        // #return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #return the number of rows
        return contacts.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = "tableCell"
        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? ContactTableViewCell
            else {
            fatalError("The dequeued cell is not an instance of ContactTableViewCell.")
        }
        
        // Configure the cell
        let contact = contacts[indexPath.row]
        cell.portraitImageView.image = UIImage(named: "portrait_placeholder")
        cell.nameLabel.text = contact.name
        cell.titleLabel.text = contact.title
        return cell
    }

}

Make sure to do the following:
Defining the tableCell identifier in the storyboard.

Connecting the table cell with the custom made view ContactTableViewCell

Connecting the view controller from storyboard to it’s view controller class.

Complete example in Github

Search within Codexpedia

Custom Search

Search the entire web

Custom Search