时间轴是大家都很熟悉的特效,在网络上也有很多现成的资源,虽然轮子已经有很多,但是我们自己尝试来做一个也不失为是一种乐趣,下面我们通过 StoryBoard 和代码来完成一个时间轴的界面。
配置 StoryBoard:
首先我们创建新的 Project ,删掉默认的 ViewController.swift,和 MainStoryBoard 中的 ViewControlle r Scene ,现在我们就有了一个空的项目。
下面我们在 Main.StoryBoard 中拖进来一个 TableViewController 给它命名为 NoteTableViewController ,然后创建 New File - File ,选择 Cocoa Touch Class ,继承自 UITableViewController ,命名为 NoteTableViewController 。
然后将 NoteTableViewController 和 NoteTableViewController.Class 进行绑定,并给Main.StoryBoard 设置一个 Identity ,并勾选 Is Initial View Controller 。
下一步,选中 NoteTableViewController 下的 TableView ,将它的 Row Height 设置为60,Prototype Cells 设置为2。
下面,设置两个 Cell ,分别命名为 RightCell 和 LeftCell ,给每个 Cell 添加 3个Buttonh 和 1个UIView。3个按钮命名依次为:middle delete edit ,宽度30,高度30,并给按钮设置对应的背景图片,并让3个按钮对齐,UIView 的宽度是2,高度30,背景颜色为黑色。
给 LeftCell 添加一个Label,文本设置为右对齐,给 RightCell 添加一个 Label,文本设置为左对齐。
最后,勾选 delete edit 两个按钮的 Hidden 选项,然后创建 New File - File ,选择 Cocoa Touch Class ,继承自 UITableViewCell ,命名为 NoteTableViewCell 。
自定义 TableViewCell
在 NoteTableViewCell 中创建两个子类,继承自 NoteTableViewCell 。
|
|
将 RightCell 和 LeftCell 和这两个子类绑定,并给这两个子类拖进来两个控件:
|
|
将三个通用的控件拖进 NoteTableViewCell 这个基类中,并设置一个 Bool 值:
|
|
创建模型
新建一个文件命名为 NoteItem ,创建结构体并嵌入枚举:
|
|
使用模型:
回到 NoteTableViewCell 中,创建配置方法 configureCell 将模型中的数据传给 Cell :
|
|
回到 NoteTableViewController 中,完善模型的数据:
|
|
配置 tableView 的行数:
|
|
自定义 Cell :
|
|
回到 NoteTableViewCell 中创建点击事件,让 middleButton 在点击时弹出隐藏的 delete 和 edit :
|
|
实现 expand() 和 close() 方法:
|
|
设置代理
将 delete 和 edit 的点击事件传递到 TableViewController :
|
|
设置代理对象:
|
|
新建一个文件,命名为 NoteTableViewContorller+NoteCellDelegate ,将代理方法添加为扩展方法:
|
|
回到 NoteTableViewCell 中,完善 middieButtonClicked 方法:
|
|
回到 NoteTableViewController 中,完善自定义 Cell 的方法,使用代理调用 configureCell 方法:
|
|
最后,添加 tableView 的 tableHeaderView ,原型基本上就完成了:
|
|
下面将完整代码贴出来方便大家参考。
完整代码:
NoteTableViewController 文件:
|
|
NoteTableViewContorller+NoteCellDelegate 文件:
|
|
NoteTableViewCell 文件:
|
|
NoteItem 文件:
|
|