时间轴是大家都很熟悉的特效,在网络上也有很多现成的资源,虽然轮子已经有很多,但是我们自己尝试来做一个也不失为是一种乐趣,下面我们通过 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
文件:
|
|