CollapsibleTableSectionViewController 1.0 终于正式发布了!

开源项目jeantimex • 于 2017-08-01 06:26:01 +0800 • 403 阅读

可收展的UITableView Sections

Github 源码:https://github.com/jeantimex/CollapsibleTableSectionViewController

本项目被收录到了 Awesome iOS 列表里 awesome-ios https://github.com/vsouza/awesome-ios

为什么会有这个项目?

在做一个小项目的时候,客户提出了一个要求,能不能将UITableView中的sections收起,实现起来虽然不复杂,但如果要在项目中重复利用,决定写一个ViewController,为此写了一篇文章:https://medium.com/@jeantimex/how-to-implement-collapsible-table-section-in-ios-142e0c6266fd.

很快,Github repo收到了很多用户的要求,希望能写一个pod方便大家快速使用,而且自己也没写过pod,所以才有了这个项目。

功能

  • 实现可收展的UITableView Sections
  • 初始化时收起所有的sections(可以配置)
  • 只保留一个section是展开的(可以配置)
  • 通过实现Protocol的方法来配置 (类似于使用UITableViewController)

安装

Cocoapods

use_frameworks! pod 'CollapsibleTableSectionViewController', '~> 1.0.0'

Carthage

github "jeantimex/CollapsibleTableSectionViewController" ~> 1.0.0

使用方法

第一步:创建CollapsibleTableSectionViewController的子类

``` import CollapsibleTableSectionViewController

class ViewController: CollapsibleTableSectionViewController { ... } ```

第二步:实现CollapsibleTableSectionDelegate的接口函数

extension ViewController: CollapsibleTableSectionDelegate { ... }

接口

以下列出了目前所支持的接口函数

1. optional func numberOfSections(_ tableView: UITableView) -> Int

询问tableView里有多少个sections. 默认值是 1.

swift extension ViewController: CollapsibleTableSectionDelegate { func numberOfSections(_ tableView: UITableView) -> Int { return 10 } }

2. optional func collapsibleTableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

询问每个section里有多少行. 默认值是 0.

swift extension ViewController: CollapsibleTableSectionDelegate { func collapsibleTableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 5 } }

3. optional func collapsibleTableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

询问每行中的cell是什么?这里你可以用UITableViewCell,或者是自定义的Cell。

swift extension ViewController: CollapsibleTableSectionDelegate { func collapsibleTableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as UITableViewCell? ?? UITableViewCell(style: .default, reuseIdentifier: "Cell") cell.textLabel?.text = "Cell Text" return cell } }

4. optional func shouldCollapseByDefault(_ tableView: UITableView) -> Bool

返回 true 如果你想要一开始的时候所有的sections都收起. 默认值是 false.

5. optional func shouldCollapseOthers(_ tableView: UITableView) -> Bool

返回 true 如果你只想要保持只有一个section是展开的(类似于Accordion的风格). 默认值是 false.

6. optional func collapsibleTableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?

每个section的标题. 默认值是 nil.

7. optional func collapsibleTableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

当点击某个cell的时候,这个函数会被执行。

例子

项目中有一个Examples的demo,里面有很多个小例子:

  1. Basic: 一个最简单的例子
  2. Custom Cell: 使用自定义的Cell
  3. Collapse By Default: 所有sections在一开始的时候都是收起的
  4. Collapse Others: 只有一个section是展开的

如果你想要了解实现这个pod功能的机制,请参看我的另一个repo: https://github.com/jeantimex/ios-swift-collapsible-table-section.

参与贡献

欢迎大家把这个repo做得更好!

作者

Yong Su @jeantimex https://github.com/jeantimex

License

MIT License

Copyright (c) 2017 Yong Su @jeantimex

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

回复: 0
暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,见 Emoji cheat sheet
  • @name 会链接到用户页面,并会通知他
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter