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.
//
// 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!"))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment