对于 iOS 开发者来说,优化 UITableView 的使用是永恒的使命。幸运的是,我找到了一种灵感来源于 Arkadiusz Holko 的文章 的精妙且简单的方法来使用它。
将文件拖放到您的项目的 Source
文件夹中。
为所有的 UITableViewCell
子类采用 Updatable
协议。按照以下格式
import DDTableViewController
class CustomCell:UITableViewCell{
...
}
struct CustomCellViewData {
// Declare all properties you need to decorate the cell
var image:UIImage
}
extension CustomCell: Updatable {
typealias ViewData = CustomCellViewData
func updateWithViewData(viewData: ViewData) {
// Decorate your cell with the viewData
}
static var height: CGFloat{
// Return the height of your cell here
return 200
}
}
然后,忘了所有的 UITableView
委托方法,使用 DDTableViewController
let cellConfigurators:[Array<CellConfiguratorType>] = [
// section 0
[
// section 0 row 0
CellConfigurator<ImageCell>(viewData: ImageCellViewData(image: UIImage(named: "sample.png")!), initFromNib: false),
// section 0 row 1
CellConfigurator<TextCell>(viewData: TextCellViewData(text: "Hello World"), initFromNib: false)
],
//section 1
[
CellConfigurator<ImageCell>(viewData: ImageCellViewData(image: UIImage(named: "sample2.png")!), initFromNib: false)
]
// ...
]
let tableVC = DDTableViewController(cellConfigurators: cellConfigurators)
self.addChildViewController(tableVC)
self.view.addSubview(tableVC.view)
tableVC.didMoveToParentViewController(self)
任务完成! (查看 Demo 文件夹中的示例)
func insertCellAtIndexPath(indexPath indexPath:NSIndexPath, withCellConfigurator cellConfigurator:CellConfiguratorType, RowAnimation animation:UITableViewRowAnimation)
func deleteCellAtIndexPath(indexPath indexPath:NSIndexPath, withRowAnimation animation:UITableViewRowAnimation)
// Manually manipulate the model layer
tableVC.cellConfigurators.append(...)
tableVC.tableView.reloadData()
func scrollToBottom(animated animated:Bool)
func scrollToTop(animated animated:Bool)