Skip to content

Instantly share code, notes, and snippets.

@sstadelman
Last active July 24, 2017 23:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sstadelman/2f2e900ff435424f9a01fee95abf1a38 to your computer and use it in GitHub Desktop.
Save sstadelman/2f2e900ff435424f9a01fee95abf1a38 to your computer and use it in GitHub Desktop.
PowerHourDemo
//
// TasksListReportFloorplanExample.swift
// PowerHour
//
// Created by Stadelman, Stan on 7/11/17.
// Copyright © 2017 sstadelman. All rights reserved.
//
import UIKit
class TasksListReportFloorplanExample: UITableViewController {
// var tasks: [ListReportFPData.Task] = ListReportFPData.tasks
//
// var searchController: FUISearchController!
// var filteredTasks: [ListReportFPData.Task] = []
// var isFiltered: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
// 1. PowerHourRegisterCellReuseIdAndAutosizing
// 3. PowerHourSearchController
// 5. PowerHourTabBarItems
}
// 2. PowerHourUITableViewDataSource
// 4. PowerHourUISearchResultsUpdating
}
extension TasksListReportFloorplanExample {
// MARK: Handler for UIToolbar Button Item Actions
func addTask() {
// add task here
}
func filterTasks() {
// set filter mode here
}
func setEditMode() {
self.tableView.setEditing(!self.tableView.isEditing, animated: true)
}
}
self.title = "Active Tasks (\(self.tasks.count))"
self.tableView.register(FUIObjectTableViewCell.self, forCellReuseIdentifier: FUIObjectTableViewCell.reuseIdentifier)
self.tableView.estimatedRowHeight = 120
self.tableView.rowHeight = UITableViewAutomaticDimension
// 3. PowerHourSearchController
searchController = FUISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
self.tableView.tableHeaderView = searchController.searchBar
// 7. PowerHourTabBarItems
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(setEditMode))
let addItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTask))
let filterItem = UIBarButtonItem(title: "Filter", style: .plain, target: self, action: #selector(filterTasks))
let spacing = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
self.navigationController?.isToolbarHidden = false
self.toolbarItems = [filterItem, spacing, addItem]
// MARK: UISearchResultsUpdating
func updateSearchResults(for searchController: UISearchController) {
guard let searchString = searchController.searchBar.text, !searchString.isEmpty else {
self.isFiltered = false
self.filteredTasks.removeAll()
self.tableView.reloadData()
return
}
self.isFiltered = true
self.filteredTasks = self.tasks.filter( { return $0.title.contains(searchString) })
self.tableView.reloadData()
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasks.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let task = tasks[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: FUIObjectTableViewCell.reuseIdentifier,
for: indexPath) as! FUIObjectTableViewCell
cell.headlineText = task.title
cell.subheadlineText = task.statusSummary
cell.detailImage = task.primaryImage
cell.detailImageView.isCircular = true
cell.footnoteText = {
switch task.onTime {
case Int.min..<0:
return "Overdue by \(abs(task.onTime)) day" + (abs(task.onTime) > 1 ? "s" : "")
case 0:
return "due today"
default:
return "Due in \(task.onTime) day" + (task.onTime > 1 ? "s" : "")
}
}()
cell.statusImage = #imageLiteral(resourceName: "flag-off_24px").withRenderingMode(.alwaysTemplate)
cell.statusImageView.tintColor = task.onTime < 1 ? UIColor.preferredFioriColor(forStyle: .negative) : UIColor.preferredFioriColor(forStyle: .positive)
cell.accessoryType = .disclosureIndicator
return cell
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment