Monday, June 22, 2015

Draw UITableView programmatically (without using the Storyboard)

Update: May 27, 2017 - Xcode 8.3.2 (Swift 3.1)
Update: March 28, 2016 - Xcode 7.3 (Swift 2.2)

To draw a table in iOS without using the storyboard, simply create a Single View Application project and modify ViewController.swift as below:

Xcode 8.3.2 (Swift 3.1)

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
       
        let tableView = UITableView(frame: CGRect(x: 20, y: 50, width: 200, height: 400), style: UITableViewStyle.plain)
        tableView.dataSource = self
        tableView.delegate = self
        view.addSubview(tableView)
    }
   
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }
   
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "myIdentifier")
        cell.textLabel?.text = "\(indexPath.row)"
        cell.detailTextLabel?.text = "Subtitle"
       
        return cell
    }

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

Xcode 7.3 (Swift 2.2)

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let tableView = UITableView(frame: CGRectMake(20, 50, 200, 400), style: UITableViewStyle.Plain)
        tableView.dataSource = self
        tableView.delegate = self
        view.addSubview(tableView)
    }
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "myIdentifier")
        cell.textLabel?.text = "\(indexPath.row)"
        cell.detailTextLabel?.text = "Subtitle"
        
        return cell
    }

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

}

Result:

*****************************

No comments:

Post a Comment