本 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下载
参考:
网友评论