In this post, I’ll be (slowly) building a UITableView
application programmatically in a Playground. First we’ll add a simple UITableView, then we’ll add a UINavigationBar. In future edits, I’ll add some more views.
Add a UITableView
I adapted the following code from this GitHub gist. I adapted some of the code to Swift 3.0, and broke out the UITableViewDataSource
into an extension of the UIViewController
. Also, things have changed with the way Playground functionality is imported and used, and those changes are reflected in the import PlaygroundSupport
statement, and the last line.
//: Playground - noun: a place where people can play import UIKit import PlaygroundSupport class ViewController: UIViewController { var tableView: UITableView? let items = [ "Hello", "Hallo", "Hullo" ] override func viewDidLoad() { super.viewDidLoad() self.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480) self.tableView = UITableView(frame: self.view.frame) self.tableView!.dataSource = self self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "cell") self.view.addSubview(self.tableView!) } } extension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.items.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.text = "\(self.items[indexPath.row])" return cell } } var ctrl = ViewController() PlaygroundPage.current.liveView = ctrl.view
Add a UINavigation Bar
I adapted the navigation bar section from a SO post. At this point, all it does is present a title and table view; I haven’t added any other views yet.
//: Playground - noun: a place where people can play import UIKit import PlaygroundSupport let navBarHeight: CGFloat = 45 class ViewController: UIViewController { var tableView: UITableView? var navigationBar: UINavigationBar? let navTitle = "Greetings" let items = [ "Hello", "Hallo", "Hullo" ] override func viewDidLoad() { super.viewDidLoad() // MARK: Table View self.view.frame = CGRect(x: 0, y: navBarHeight, width: 320, height: 480) self.tableView = UITableView(frame: self.view.frame) self.tableView!.dataSource = self self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "cell") self.view.addSubview(self.tableView!) // MARK: Navigation Bar self.navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: navBarHeight) ) self.navigationBar!.backgroundColor = UIColor.white() let navigationItem = UINavigationItem(title: self.navTitle) self.navigationBar!.items = [navigationItem] self.view.addSubview(self.navigationBar!) } } // MARK: Table View Data Source extension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.items.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.text = "\(self.items[indexPath.row])" return cell } } var ctrl = ViewController() PlaygroundPage.current.liveView = ctrl.view