Skip to content

Instantly share code, notes, and snippets.

@appsird
Forked from cmoulton/ViewController.swift
Last active November 16, 2016 05:16
Show Gist options
  • Save appsird/0745472636e34f2e487cf1e55112ae4e to your computer and use it in GitHub Desktop.
Save appsird/0745472636e34f2e487cf1e55112ae4e to your computer and use it in GitHub Desktop.
UITableView updates example. See https://grokswift.com/uitableview-updates/
//
// ViewController.swift
// starWarsTableViewUpdates
//
// Created by Christina Moulton on 2015-10-17.
// Copyright (c) 2015 Teak Mobile Inc. All rights reserved.
//
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView?
var movies:Array<String>? = ["Star Wars", "The Empire Strikes Back", "A New Hope"]
var tapCount = 0
override func viewDidLoad() {
super.viewDidLoad()
let addButton = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(buttonTapped))
self.navigationItem.rightBarButtonItem = addButton
}
func buttonTapped(sender: AnyObject) {
tapCount += 1
if (tapCount == 1)
{
// Add the prequels if we're not showing them yet
movies?.insert("The Phantom Menace", at: 0)
movies?.insert("The Attack of the Clones", at: 1)
movies?.insert("Revenge of the Sith", at: 2)
// use a single call to update the tableview with 3 indexpaths
self.tableView?.insertRows(
at: [IndexPath(row: 0, section: 0),
IndexPath(row: 1, section: 0),
IndexPath(row: 2, section: 0)],
with: .automatic)
}
else if (tapCount == 2)
{
// Add the sequels, even though they don't exist yet
// use one call to delete and one call to add rows to the tableview
// so we need to wrap them in beginUpdates()/endUpdates()
if let count = movies?.count
{
self.tableView?.beginUpdates()
// add sequels
movies?.append("The Force Awakens")
movies?.append("Episode 8")
movies?.append("Episode 9")
self.tableView?.insertRows(
at: [IndexPath(row: count - 3, section: 0),
IndexPath(row: count + 1 - 3, section: 0),
IndexPath(row: count + 2 - 3, section: 0)],
with: .automatic)
// remove prequels
movies?.remove(at: 0)
movies?.remove(at: 0)
movies?.remove(at: 0)
self.tableView?.deleteRows(
at: [IndexPath(row: 0, section: 0),
IndexPath(row: 1, section: 0),
IndexPath(row: 2, section: 0)],
with: .automatic)
self.tableView?.endUpdates()
}
}
}
// MARK: - TableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return movies?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath) as UITableViewCell
if let movieTitle = movies?[indexPath.row]
{
cell.textLabel!.text = movieTitle
}
else
{
cell.textLabel!.text = ""
}
print("row: \(indexPath.row), title: \(cell.textLabel!.text!)")
return cell
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment