SRISTableView 0.1.3

SRISTableView 0.1.3

Rob维护。



  • Rob

SRISTableView (SRInfiniteScrollingTableView)

SRISTableView 是一个帮助开发者实现无限滚动的 UITableViews 的库,类似于 Facebook 或 Twitter 的新闻源。

安装

手动方式

只需在工作计算机上克隆此项目,然后在您的项目中将 Source/SRISTableView 目录下的文件添加进去即可。

CocoaPods

只需在 Podfile 中添加这一行:pod 'SRISTableView'

如何使用

假设您已经有一个包含 UITableViewUIViewController,并且想要使此表格视图无限滚动。

final class TestViewController: UIViewController {
    @IBOutlet weak var tableView: UITableView!
}

您只需要三件事(实际上,只需要两件事)

委托类型 (SRISDelegate)

一个遵循 SRISDelegate 的自定义类型,充当您表格视图的委托。这个委托将处理以下事项

  • 声明一个泛型 ContentType
  • 填充请求数据(classNamefilterParameterssortingrecordsPerRequest...)
  • 对结果数据进行排序
  • 处理缓存
  • 设计不同的预期单元格(resultCellfailedCellnoResultCell...)
  • 基本的表格视图委托方法和属性(didSelect()tableRowHeight...)

请求类型 (SRISRequest)

另一个遵循 SRISRequest 的自定义类型,其中您定义您的API调用和预期的完成。如果需要,您还可以声明一个处理缓存的调用。

管理器 (SRISManager)

将混合一个 SRISDelegate 和一个 SRISRequest 的对象,并将其链接到您的表格视图。

示例

假设我们想创建一个新闻源,使用一个虚构API中的数据。一个简单的表格视图,不使用任何缓存数据。我们只想显示简单的 String 对象。

请求类型

func load<Delegate>(delegate: Delegate, skipping: Int, cachingData: Bool, _ completion: @escaping ([String]?, Error?) -> ()) where Delegate : SRISDelegate {
    var query = TestQuery(clasName: delegate.className) // The class name, for example "NewsFeed"
    delegate.filterParameters.forEach { key, value in
        query.whereKey(key, equalTo: value)
    }
    query.limit = delegate.recordsPerRequest // The limit of results per request
    query.skipping = skipping // The number of results to skip
    // Fetching data
    query.fetchData { (result, error) in 
        completion(result, error)
    }
}

委托

struct NewsFeedDelegate: SRISDelegate {
    typealias ContentType = String

    var className: String {
        return "NewsFeed" // The data class name
    }

    var recordsPerRequest: Int {
        return 10 // The amount of results to load per request
    }

    func displayedResults(fromUnorderedResults unorderedResults: [String]) -> [String] {
        return unorderedResults.sorted() // How to sorted the data to be displayed
    }

    var shouldCacheData: Bool {
        return false
    }

    func resultCell(forTableView tableView: UITableView, andObject object: String, atIndexPath indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "newsFeedCell", for: indexPath)
        cell.textLabel?.text = object
        return cell
    }

    func didSelect(object: String) {
        // Equivalent of didSelectRow(atIndexPath)
    }

    var shouldShowFailedCell: Bool {
        return false
    }
}

管理器

final class TestViewController: UIViewController {
    var manager: SRISManager<NewsFeedDelegate, NewsFeedRequest>?
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.manager = SRISManager.setupAndStart(inTableView: self.tableView,
                                                 withLoadMoreOnScrollDelegate: NewsFeedDelegate(),
                                                 andRequestType: NewsFeedRequest())
    }
}

然后...瞧!

许可证

SRISTableView 在 MIT 许可证下发布。请参阅 LICENSE 获取详细信息。