本 demo 特色功能:
- Navigation Item Large Title
- 多個視圖繼承自定義的 SwipeTableViewController (使用 SwipeCellKit 封裝的可編輯 TableView)
- realm 緩存數據到本地
- 模糊搜索
- 動態 cell 背景色優化
- navigationBar 背景色優化
- ChameleonFramework (變色龍Framework)使用
主要代碼:
功能2:
SwipeTableViewController:
import UIKit
import SwipeCellKit
class SwipeTableViewController: UITableViewController, SwipeTableViewCellDelegate {
var cell: UITableViewCell?
override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = 80.0
}
// TableView Datasource Methods
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! SwipeTableViewCell
cell.delegate = self
return cell
}
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
guard orientation == .right else { return nil }
let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
// handle action by updating model with deletion
self.updateModel(at: indexPath)
}
// customize the action appearance
deleteAction.image = UIImage(named: "delete-icon")
return [deleteAction]
}
func tableView(_ tableView: UITableView, editActionsOptionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> SwipeTableOptions {
var options = SwipeTableOptions()
options.expansionStyle = .destructive
return options
}
func updateModel(at indexPath: IndexPath) {
// Update our data model.
print("Item deleted from superclass")
}
}
功能4:
extension TodoListViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
todoItems = todoItems?.filter("title CONTAINS[cd] %@", searchBar.text!).sorted(byKeyPath: "dateCreated", ascending: true)
tableView.reloadData()
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text?.count == 0 {
loadItems()
DispatchQueue.main.async {
searchBar.resignFirstResponder()
}
}
}
}
功能6:
func updateNavBar(withHexCode colourHexCode: String){
guard let navBar = navigationController?.navigationBar else {fatalError("Navigation controller does not exist.")}
guard let navBarColour = UIColor(hexString: colourHexCode) else { fatalError()}
navBar.barTintColor = navBarColour
navBar.tintColor = ContrastColorOf(navBarColour, returnFlat: true)
navBar.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor : ContrastColorOf(navBarColour, returnFlat: true)]
searchBar.barTintColor = navBarColour
}
功能7:
navBar.tintColor = ContrastColorOf(navBarColour, returnFlat: true)
方法 ContrastColorOf() 作用是根據背景色生成相應的黑色或白色。本例中 navBar 字體顏色根據 navBarColour 背景色的不同而生成或白或黑的顏色,提高視覺體驗。比如背景色爲黑色的時候,字體顯示爲白色,背景色爲白色的時候,字體顯示爲黑色。
ContrastColorOf 方法具體註釋:
Creates and returns either a black or white color object depending on which contrasts more with a specified color.
- parameter backgroundColor: The specified color of the contrast color that is being requested.
- parameter returnFlat: Pass **true** to return flat color objects.
- returns: A UIColor object in the HSB colorspace.
demo下載
參考: