昨天我们已经完成使用Delegate回传值到首页的部分了,那今天就要来完成最後一个步骤:
马上开始吧!
var alarmDatas: [AddAlarmInfo] = []
extension AlarmViewController: UpdateAlarmListDelegate {
func updateAlarmList(alarmData: AddAlarmInfo) {
// 将回传回来的闹钟资讯加入该阵列内
self.alarmDatas.append(alarmData)
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
// 第一个Section下显示一个Cell即可
return 1
case 1:
// 第二个Section显示的Cell数量为:alarmDatas阵列的成员个数
return alarmDatas.count
default:
// 其余不显示任何Cell
return 0
}
}
case 1:
// 将实作的AlarmOtherTableViewCell实体化,并显示於第二个Section的画面上
guard let cell = tableView.dequeueReusableCell(withIdentifier: AlarmOtherTableViewCell.identifier, for: indexPath) as? AlarmOtherTableViewCell else { return UITableViewCell() }
// 每个cell的alarmTimeLabel的文字内容 放入 相对应「alarmDatas」的time
cell.alarmTimeLabel.text = alarmDatas[indexPath.row].time
// 每个cell的alarmNoteLabel的文字内容 放入 相对应「alarmDatas」的annotation
cell.alarmNoteLabel.text = alarmDatas[indexPath.row].annotation
return cell
OH~ 原来是「alarmDatas」阵列内的time是属於Date型别,Date型别无法放入Label的文字内,
因此我们必须要做一个Date转换为String的动作。
// 实作Function:「dateToString」,一共有两个参数
// 第一个date 是: 要转换的时间
// 第二个format是: 要转换爲何种时间格式
func dateToString(date: Date, format: String) -> String {
// 宣告dateFormatter
let dateFormatter = DateFormatter()
// 设定要转换的时间格式为: 带入的参数「format」
dateFormatter.dateFormat = format
// 将时间转换为字串後回传
return dateFormatter.string(from: date)
}
case 1:
// 将实作的AlarmOtherTableViewCell实体化,并显示於第二个Section的画面上
guard let cell = tableView.dequeueReusableCell(withIdentifier: AlarmOtherTableViewCell.identifier, for: indexPath) as? AlarmOtherTableViewCell else { return UITableViewCell() }
// 每个cell的alarmTimeLabel的文字内容放入
// 相对应「alarmDatas」的time
cell.alarmTimeLabel.text = dateToString(date: alarmDatas[indexPath.row].time, format: "HH:mm")
// 每个cell的alarmNoteLabel的文字内容放入
// 相对应「alarmDatas」的annotation
cell.alarmNoteLabel.text = alarmDatas[indexPath.row].annotation
return cell
执行看看吧!
怎麽失败了呢?
原因是当你更改「alarmDatas」阵列的值後,并没有人通知TableView已经更改值了,要更新画面了
因此加入以下程序码,通知TableView该刷新画面罗!
var alarmDatas: [AddAlarmInfo] = [] {
// didSet的意思是:当这个变数被变更时,执行以下动作
didSet {
// TableView的画面更新
alarmTableView.reloadData()
}
}
再执行看看吧!
成功啦!!!
这次铁人赛也告一个段落了
虽然这段日子有快乐也有不快乐,但这些日子也是我人生中不会忘记的一段时间
很感谢这些日子的陪伴,希望大家接下来都能快快乐乐的:)
若对於任何一篇文章有疑问的,也很欢迎大家留言告诉我,
感谢大家的观看!我们有缘就下次铁人赛见罗!
<<: DAY 28『 使用相机拍照 』 ImagePicker - Part2
Network Architectures 前面都在介绍单一神经元的算法,复习一下。 一个神经元的输...
今日题目 题目连结:94. Binary Tree Inorder Traversal 题目主题:S...
Syft 可以用来产生容器 (container image) 与档案系统 (file system...
最後我们学习如何控制多个表单的开合 ...
在第一个 API 中我们编写的 View,不知道大家有没有觉得非常简洁呢,好像没有写什麽代码,但是就...