// // 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!")) } }