状态集合
用于iOS的简单状态集合视图。
状态集合是一个小型且轻量级的Swift框架,允许轻松创建支持空、加载和错误状态的UITableView和UICollectionView。
可以部分定制以提供更大的灵活性,同时保持简单。它在视图自定义和易用性之间取得了良好的平衡。
功能
- 易于使用
- 可定制
- 支持空、加载和错误状态
要求
- iOS 13.0+
- Xcode 11.3
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 StatefulCollections 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
pod 'StatefulCollections'
基本用法
在需要使用状态化表格视图或集合视图的任何地方导入 StatefulCollections 模块。将您的集合风格视图类设置为相应的子类,StatefulTableView 或 StatefulCollectionView。
import StatefulCollections
// Other imports ...
class ViewController: UIViewController {
@IBOutlet weak var tableview: StatefulTableView!
@IBOutlet weak var collectionview: StatefulCollectionView!
// ...
}
如果您需要,可以在 story board 中设置类和导入模块。
要设置视图的状态,请使用 setStateTo
方法。
tableview.setState(to: .loading)
collectionview.setState(to: .empty)
这两种视图都支持四种不同的状态
状态 | 视图 | 图片 | 文本 | 使用 |
---|---|---|---|---|
.normal | 标准视图外观。 | N/A | N/A | 用作默认状态,当需要显示内容时使用。 |
.loading | 移除单元格分隔线,显示活动指示器并显示默认文本。 | N/A | 'Loading...' | 在加载数据或处理数据(Core Data、网络、文件解析等)时使用。 |
.empty | 移除单元格分隔线,显示 SF Image 和默认文本。 | 'text.badge.xmark' | 'No results' | 当没有结果显示时使用。 |
.error | 移除单元格分隔线,显示 SF Image 和默认文本。 | 'xmark.octagon' | 'There was an unknown error' | 在获取集合数据的过程中失败时使用(I/O 错误、网络等)。 |
定制
StatefulCollections 允许一定程度上的定制,但尽可能保持简单。
虽然您无法添加或删除每个状态的基本视图组件,但可以自定义显示的组件。可以自由修改图像、标签和分隔线样式。
例如
tableview.setState(to: .error)
将给您的表视图以下外观
但是,您可以设置图像和文本为其他值
let errorImage = UIImage(systemName: "clear")
tableview.setImage(to: errorImage, forState: .error)
tableview.setText(to: "Network error", forState: .error)
// ...
tableview.setState(to: .error)
除了设置自定义图像和文本外,还可以设置自定义色调和颜色。颜色应用于视图本身,且与状态无关。
tableview.setImageTint(to: .red)
tableview.setTextColor(to: .blue)
重置状态和颜色
如果您想重置任何状态外观到其原始设置,只需使用 resetState
或 resetAllStates
tableview.setText(to: "Server error", forState: .error)
tableview.setText(to: "Loading data from disk...", forState: .loading)
tableview.setText(to: "There were no results for your query", forState: .empty)
// ...
tableview.reset(state: .error) // Only error state will be reset
// ...
tableview.resetAllStates() // Every state will be reset to default values
由于颜色与状态无关,当您需要为单个对象定义自定义颜色时,必须在设置该状态时每次都设置这些颜色,并且在显示另一个对象时重置它们。
tableview.setImageTint(to: .red)
tableview.setTextColor(to: .yellow)
tableview.setState(to: .error)
// ...
tableview.resetTextColor()
tableview.resetImageTint()
tableview.setState(to: .empty)
贡献
如果您想为 StatefulCollections 贡献,请查看 LICENSE
文件以获取更多信息。
元数据
Guillem Espejo – [email protected]
在 MIT 许可证下分发。更多信息请参阅 LICENSE
文件。