Skip to content

Instantly share code, notes, and snippets.

@haldun
Created March 3, 2016 18:51
Show Gist options
  • Save haldun/000ec8d77e3c159c6ab0 to your computer and use it in GitHub Desktop.
Save haldun/000ec8d77e3c159c6ab0 to your computer and use it in GitHub Desktop.

Revisions

  1. haldun created this gist Mar 3, 2016.
    93 changes: 93 additions & 0 deletions RootViewController.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,93 @@
    //
    // RootViewController.swift
    // Filters
    //
    // Created by Haldun Bayhantopcu on 03/03/16.
    // Copyright © 2016 Haldun Bayhantopcu. All rights reserved.
    //

    import UIKit

    struct Filter {
    let key: String
    let value: String?
    }

    extension Filter: Equatable {}

    func ==(lhs: Filter, rhs: Filter) -> Bool {
    return lhs.key == rhs.key
    }

    final class RootViewController: UITableViewController {

    var filters = [
    Filter(key: "filter 1", value: nil),
    Filter(key: "filter 2", value: "hehehehe"),
    ]

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

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return filters.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
    let filter = filters[indexPath.row]
    cell.textLabel?.text = filter.key
    cell.detailTextLabel?.text = filter.value
    return cell
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let filter = filters[indexPath.row]
    let filterViewController = FilterViewController(filter: filter)
    filterViewController.delegate = self
    showViewController(filterViewController, sender: self)
    }
    }

    extension RootViewController: FilterViewControllerDelegate {
    func filterChanged(filter: Filter) {
    navigationController?.popViewControllerAnimated(true)
    print("filter changed: \(filter)")

    if let index = filters.indexOf(filter) {
    filters[index] = filter
    tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: index, inSection: 0)], withRowAnimation: .Automatic)
    }
    }
    }

    protocol FilterViewControllerDelegate: class {
    func filterChanged(filter: Filter)
    }

    class FilterViewController: UIViewController {

    let filter: Filter

    weak var delegate: FilterViewControllerDelegate?

    init(filter: Filter) {
    self.filter = filter
    super.init(nibName: nil, bundle: nil)
    }

    required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
    }

    override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.whiteColor()
    view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "tapped:"))
    }

    func tapped(sender: AnyObject?) {
    delegate?.filterChanged(Filter(key: filter.key, value: "new value!"))
    }
    }