AListViewController
功能
- 使用单一生成方法配置
TableView
或CollectionView
- 轻松且动态地管理分区和行
- PullToRefresh和无限滚动
安装
AListViewController通过CocoaPods提供。
要安装它,只需将以下行添加到Podfile
pod "AListViewController"
pod "AListViewController/PullToRefresh" #pullToRefresh feature
pod 'AListViewController/InfiniteScrolling' #infiniteScrolling feature
要求
Swift 3.0
它是如何工作的?
AListViewController 有两个子类
ATableViewController
ACollectionViewController
这些子类之间的唯一区别是 ListView
- 为
ATableViewController
提供UITableView
- 为
ACollectionViewController
提供UICollectionView
用法
在调用 super.viewDidLoad()
之前调用 self.configure()
并带上以下参数
cellIdentifier: @escaping (IndexPath, Any) -> String
- 配置 IndexPath 上的单元格标识符
cellUpdate: @escaping (IndexPath, Any, ListViewCell) -> Void
- 更新 IndexPath 上的单元格
ATableViewController
: cellSize: ((IndexPath, Any) -> CGSize)?
ACollectionViewController
: cellHeight: ((IndexPath, Any) -> CGFloat)?
- 为 IndexPath 设置单元格大小
ACollectionViewController
: minimumSpacing: ((Int) -> CGSize)?
- 为部分设置最小间距(width: interItem, height: line)
sourceObjects: @escaping ((@escaping ([[Any]], Bool) -> Void) -> Void)
- 在此闭包中获取数据。
- 调用完成闭包以返回这些信息。
- 获取的新对象(sourceObjects)。
- 如果存在后续加载(hasNext)。
didSelectCell: ((IndexPath,Any) -> Void)?
- 处理单元格点击
public func refreshData(reload: Bool, immediately: Bool)
- reload: true - 使用
fetchSourceObjects
替换ListView
的内容 - immediately: true - 立即让ListView
为空。 - immediately: false - 在获取数据后刷新 tableView。 - reload: false - 将
fetchSourceObjects
添加到ListView
的内容中
示例
import AListViewController
class ExampleTableViewController: ATableViewController {
let section0 = ["Cell 1 Section 1","Cell 2 Section 1"]
let section1 = ["Cell 1 Section 2","Cell 2 Section 2"]
override func viewDidLoad() {
self.configure(cellIdentifier: { _ -> String in
return "cell"
}, cellUpdate: { (_, object, cell) in
cell.textLabel?.text = object as? String
}, sourceObjects: { (completion) in
completion([self.section0,self.section1], true)
}, didSelectCell: { (_, object) in
print("select: \(object as! String)")
})
super.viewDidLoad()
}
//You still can override UITableViewDelegate or UICollectionViewDelegate methods for additional customizations
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Section \(section)"
}
}
在这个例子中,UITableView
与您的故事板相关联,您有一个带有 "cell" 标识符的原型单元格。如果您调用 refreshData(reload: true)
,则 ListView
的内容不会更改。
但是,如果您调用 refreshData(reload: false)
- 则
self.section0
被添加到索引 0 的部分中 - 则
self.section1
被添加到索引 1 的部分中
现在,
- 索引 0 的部分现在包含
["Cell 1 Section 1","Cell 2 Section 1","Cell 1 Section 1","Cell 2 Section 1"]
- 索引 0 的部分现在包含
["Cell 1 Section 2","Cell 2 Section 2","Cell 1 Section 2","Cell 2 Section 2"]
附加用法
public var fetchSourceObjectsOnViewDidLoad: Bool
public var rowAnimationEnabled: Bool
public var pullToRefreshEnabled: Bool //AListViewController/PullToRefresh
public var infiniteScrollingEnabled: Bool //AListViewController/InfiniteScrolling
open func addPullToRefresh(_ animator: ESRefreshProtocol & ESRefreshAnimatorProtocol) //AListViewController/PullToRefresh
open func addInfiniteScrolling(_ animator: ESRefreshProtocol & ESRefreshAnimatorProtocol) //AListViewController/InfiniteScrolling
public var rowAnimation: (delete: UITableViewRowAnimation, insert: UITableViewRowAnimation, reload: UITableViewRowAnimation) //ATableViewController
public func registerCellClass(_ `class`:AnyClass,withIdentifier identifier: String)
public func registerCellNib(_ nib: UINib,withIdentifier identifier: String)
public func insertSection(withObject objects:[Any]...,at index: Int? = nil)
public func insertSections(withObjects objects:[[Any]],at index: Int? = nil)
public func deleteSection(withIndex indexs:Int...)
public func deleteSections(withIndexs indexs:[Int]? = nil)
public func reloadSection(withIndex indexs:Int...)
public func reloadSections(withIndexs indexs:[Int]? = nil)
public func insertRow(withObject object:Any,at indexPath:IndexPath? = nil)
public func insertRows(withObjects objects:[Any],at indexPaths:[IndexPath])
public func deleteRow(withIndex indexs: IndexPath...)
public func deleteRows(withIndexs indexs: [IndexPath])
public func reloadRow(withIndex indexs:IndexPath...)
public func reloadRows(withIndexs indexs:[IndexPath]? = nil)
public func object(atIndexPath indexPath: IndexPath) -> Any
作者
Arnaud Dorgans
Twitter @arnauddorgans
Email [email protected]
致谢
灵感来源于 mishimay
许可
AListViewController 适用于 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。