Raclette 是一个简单的 UITableView
扩展,可以动态添加部分和行。
Raclette(在英语中发音为 ruck-lett)是瑞士的国菜。传统的菜肴可以描述为与煮熟(或烤制)的马铃薯和芥菜及腌洋葱一起食用的融化的奶酪。
Raclette可以让您在几秒钟内轻松地修改您的 UITableView
。
示例
首先要做的是用Raclette包装您的UITableView
let raclette = Raclette(tableView: tableView)
完成。您可以出发了!
raclette.isRowHighlightingEnabled = true
raclette.createSection { section in
section.headerTitle = "My section header"
section.footerTitle = "My section footer"
section.createRow { row in
row.configuration = { cell in
cell.textLabel?.text = "Hello World!"
}
row.shouldHighlight = { cell, _ in
return false // overrides global setting
}
row.didSelect = { cell, tableInfo in
cell.textLabel?.text = "Selected"
tableInfo.tableView.deselectRow(at: tableInfo.indexPath, animated: true)
}
}
}
结果
有关更多示例,请参阅 示例项目。
UITableView
扩展中UITableViewCell
的自己的单元格UIScrollViewDelegate
的重定向UITableViewDelegate
和 UITableViewDataSource
的实现Raclette可以通过 CocoaPods 提供。要安装它,只需将以下行添加到您的Podfile中
pod 'Raclette'
tableView.isRowHighighlightingEnabled
全局启用/禁用行高亮tableView.isDynamicRowHeightEnabled
全局启用/禁用动态行高tableView.isAutomaticRowDeselectionEnabled
全局启用/禁用自动行取消选择tableView.scrollViewDelegate = self
将滚动视图代理重定向到调用实例(注意必须在类头中实现 UIScrollViewDelegate
)行可以带或不带指定部分添加到表格中。如果您未指定部分,Raclette会将行添加到表格的最后一个部分。如果您之前没有添加部分,Raclette会为您创建一个默认的部分。
raclette.createRow { row in
row.height = 50
}
可用的代理方法
单元格是行的实际UI表示。
动态高度
动态高度默认全局对所有单元格启用。以下是如何使用并从动态高度功能受益的示例(使用默认的UITableViewCell
类)
raclette.createRow { row in
row.configuration = { cell in
cell.textLabel?.numberOfLines = 0
cell.textLabel?.text = "Very long text..."
}
}
您可以关闭特定行的动态高度。
raclette.createRow { row in
row.dynamicHeight = false
}
或者您可以在全局关闭动态行高。
raclette.isDynamicRowHeightEnabled = false
为了使动态高度与自定义单元格一起工作,您必须正确设置约束。
正确设置约束是使动态单元格高度与自动布局一起工作的最难和最重要的部分。如果您在这里犯了一个错误,可能会阻止其他所有功能正常工作——所以请多花点时间!
为了确定每行的实际高度,表格视图会自动询问每个单元格其contentView需要多少高度(基于contentView的已知固定宽度,这基于表格视图的宽度,减去任何额外的部分,比如部分索引或附件视图)以及您添加到单元格contentView和子视图的自动布局约束。 来源
自定义单元格
自定义单元格必须继承自UITableViewCell
,可以像这样使用
class CustomCell: UITableViewCell {
@IBOutlet weak var testLabel: UILabel!
}
raclette.createRow { (row: Row<CustomCell>) in
row.configuration = { cell in
cell.testLabel.text = "My Test Label"
}
}
添加部分就像添加行一样简单。
raclette.createSection { section in
section.headerTitle = "My Section Title"
}
Raclette受到Shoyu和TableManager的极大启发。
Raclette在MIT许可下发布。有关详细信息,请参阅LICENSE。