JSONViewControllers
[](https://travis-ci.org/Graham Perks/JSONViewControllers)
用法
UITableViewController 及 UICollectionViewController 子类在以下情况下很有用:
- 在多个表/集合中共享单元格
- 表格结构未知或在构建时是可变的
它们
- 将单元格逻辑移动到单元格控制器类中
- 使数据源数据驱动
- 可以从 JSON 中加载数据表结构
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
。
JSON 描述您的表格。该 JSON 可以在运行时下载、嵌入或生成。它描述了表格的各个部分和行。
每一行都有一个由单元格定义决定的属性集。例如,显示名称的单元格可能定义了一个“名称”属性。例如:
[
{
"rows": [
{
"nib": "NameCell",
"name": "Graham Perks"
}
]
}
]
这是一个单单元格表格。外部数组用于区域;单个区域包含行数组。有趣的是,单元格可以为其数据定义键值路径,例如:
{
"nib": "NameCell",
"nameKeyPath": "user.name"
}
单元格将在表视图控制器上显示“user.name”键路径的值。
XIB不是必需的。也可以将单元格定义为一个类
{
"class": "NameCell",
"nameKeyPath": "user.name"
}
预定义键
行为
当行被点击时,将触发“行为”键。值应该是选择器的名称;可选地,它还可以接受一个参数,该参数将是单元格定义字典。
func menuItemTapped(cell: [String : AnyObject]) {
let json = JSON(cell)
// Log an event given the "analytics" entry in the row definition, e.g.
Analytics.LogEvent(json["analytics"].stringValue)
// And trigger the segue given the "segue" value.
if let segueName = json["segue"].string {
parentViewController?.performSegueWithIdentifier(segueName, sender: self)
}
}
驱动这种逻辑的适当单元格可能如下:
{
"action": "menuItemTapped:",
"nib": "NavigationCell",
"analytics": "Navigator|food",
"segue": "showFoodMenu",
"caption": "Food Menu",
"icon": "icn_foodmenu"
}
JSON不是必需的。可以在运行时构建视图结构后直接分配给'区域'数组。
提示
- 添加
import SwiftyJSON
。 - 在设计nib时,首先删除Interface Builder提供的UIView,然后拖出一个表格或集合视图单元格。
- 使XIB、类和单元格的可重用标识符相同。
- 在单元格内使用自动布局定义单元格高度。
要求
使用SwiftyJSON简化JSON操作。
安装
JSONViewControllers可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的Podfile中:
pod "JSONViewControllers"
对于Objective-C的实现,请参阅 https://github.com/gperks/ASPTableViewController。
作者
格雷厄姆·帕金斯,[email protected]
许可协议
JSONViewControllers 遵循 MIT 许可协议。更多信息请查看 LICENSE 文件。