AListViewController 0.1.2

AListViewController 0.1.2

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2018年4月
SwiftSwift版本3.0
SPM支持SPM

Arnaud Dorgans维护。



AListViewController

CI Status Version License Platform

功能

  • 使用单一生成方法配置TableViewCollectionView
  • 轻松且动态地管理分区和行
  • 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 文件。