EVSlidingTableViewCell
关于
EVSlidingTableViewCell 是一个自定义的 UITableViewCell,实现了类似于 GChat 的“滑动以显示”功能。它支持 1 到 4 个可配置的操作按钮,用户定义的叠加层滑动时将显示这些按钮。
使用
要运行示例项目,克隆仓库,并在 Example 目录中运行 pod install
要求
- Swift 4.0+
- iOS 9.0+
安装
EVSlidingTableViewCell可以通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中即可:
pod "EVSlidingTableViewCell"
同样包括
user_frameworks!
文档
入门
1. 创建遮罩视图
创建您的自定义遮罩视图。这是您想要滑动以显示开关选项的视图。请确保重写setupUI方法,因为它是由DrawerView调用的,并允许轻松在单元格中设置UIAttributes。viewParameters类型来自此方法,这应该是您用于设置遮罩视图的通用对象。
import EVSlidingTableViewCell
class OverlayView: EVOverlayView {
@IBOutlet private weak var titleLabel: UILabel!
//override this method
override func setupUI(){
}
}
}
2. 在视图控制器中注册单元格
将自定义单元格注册到UITableView中,就像任何其他自定义单元格一样。
contactsTableView.register(SlidingTableViewControllerCell<MyStruct>.self, forCellReuseIdentifier: SlidingTableViewControllerCell<Any>.reuseIdentifier)
扩展SlidingTableViewCellDelegate
extension ViewController: SlidingTableViewCellDelegate { }
最后,定义类型为DrawerViewClosureType的闭包,这些闭包在抽屉视图按钮点击时执行。您可以根据需要创建任何闭包。遵循GChat主题,以下包括了一些示例。
func emailClosure() -> DrawerViewClosureType {
func openEmail(text: String) -> (Bool) {
UIApplication.sharedApplication().openURL(NSURL(string: "mailto:\(text)")!)
return true
}
return openEmail
}
func phoneClosure() -> DrawerViewClosureType {
func openPhone(text: String) -> (Bool) {
let phoneNumber: String = text.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).joinWithSeparator("")
UIApplication.sharedApplication().openURL(NSURL(string: "tel://\(phoneNumber)")!)
return true
}
return openPhone
}
func textClosure() -> DrawerViewClosureType {
func openMessenger(text: String) -> (Bool) {
let phoneNumber = text.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).joinWithSeparator("")
UIApplication.sharedApplication().openURL(NSURL(string: "sms:+\(phoneNumber)")!)
return true
}
return openMessenger
}
项目描述
EVConstants
包含项目中使用到的常量的结构体。
- 公开
- bundle—-> pod 的标识符(EVSlidingTableViewCell)
- evTableViewCell—-> UITableViewCell 的 nib 文件
ContactItem
表示抽屉视图中图标之一的内部 UIView,其中包含在 buttonClick 上执行的由用户定义的闭包。每个 ContactItem 都从 DrawerViewOption 获取其信息。
DrawerViewOption
包含 ContactItem 的值的结构体。根据要在 DrawerView 中显示的 ContactItem 的数量构建一个 DrawerViewOptions 的数组(必须在 1 到 4 之间)。
- 参数
- closure—-> 类型为
DrawerViewClosure
的闭包,在 ContactItems IBAction 上执行 - valueForButtonAction—-> 输入闭包的
String
- textForLabel—-> ContactItem 显示的标签的
String
- buttonImage—-> 要在 ContactItem 按钮上显示的
UIImage
- closure—-> 类型为
SlidingTableViewControllerCell
允许覆盖滑动并显示抽屉的 UITableViewCell
- 公开方法
- setCellWithAttributes(overlayParameters overlayParameters: OverlayDictionaryType, drawerViewOptions: DrawerViewOptionsType, overlayView overlay: EVOverlayView)
- 将
overlay
放在 drawer 单元格上,根据drawerViewOptions
建立抽屉视图图标,并将overlayParameters
传递给用户定义的覆盖。通过调用setUI()
启动覆盖视图的 UI 设置。 - resetOverlay() 将覆盖重置为中心位置。
SlidingTableViewDelegate
公开协议,作为 SlidingTableViewCell 的代理,示例项目包含完整示例实现。
- 方法
- didSelectRowIn(_ tableView: UITableView, atIndexPath indexPath: NSIndexPath)
- 当单元格被选中时在打开的单元格上调用
resetOverlay
- 具有默认实现,可以被覆写
- 当单元格被选中时在打开的单元格上调用
- didSelectRowIn(_ tableView: UITableView, atIndexPath indexPath: NSIndexPath)
EVOverlayView
符合 EVOverlayProtocol 的 UIView。当你创建你的覆盖时,扩展 EVOverlay,```class YourOverlay: EVOverlayView `{}````.
- 参数
- viewParameters ->
T
包含了在cell.setCellWithAttributes(...)
方法调用中从 overlayParameters 所有用户定义的属性
- viewParameters ->
- 方法
- setupUI() -> 覆盖此方法以为你的覆盖设置自定义布局,参见示例项目中的
OverlayView
以获取示例实现
- setupUI() -> 覆盖此方法以为你的覆盖设置自定义布局,参见示例项目中的
扩展
- UITableView -> 添加了用于检查覆盖是否存在或隐藏的存储属性
- UIView -> 添加了方法
.loadFromNib(bundle)
,它在示例项目中使用,用于从 nib 加载文件,参见 Stack Overflow 答案
类型别名
- DrawerViewOptionType ->
[DrawerViewOption]
- DrawerViewClosureType ->
((String) -> Bool)
作者
Eric Vennaro, [email protected]
许可
EVSlidingTableViewCell 根据 MIT 许可证 提供。有关更多信息,请参阅 LICENSE 文件。
版权 © 2016-现在 Eric Vennaro。