目前已经将Protocol都设置完毕了,那现在就要来实作让其他的ViewController执行Protocol内的Function。
现在Protocol设置完毕了,那要如何知道谁该执行这个Protocol内的Function呢?
回到AddAlarmViewController内的「didSelectRowAt()」新增
「vc.updateAlarmLabelDelegate = self」的程序码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
// 点击第一栏时,要做什麽
case 0:
break
// 点击第二栏时,要做什麽
case 1:
let vc = AlarmLabelViewController()
// 让AddAlarmViewController成为
// AlarmLabelViewController的updateAlarmLabelDelegate的执行者
vc.updateAlarmLabelDelegate = self
// 使用navigationController的pushViewController(),达到画面由右至左的效果。
self.navigationController?.pushViewController(vc, animated: true)
// 点击第三栏时,要做什麽
case 2:
break
// 点击第四栏时,要做什麽
case 3:
break
default:
break
}
}
这时候AlarmLabelViewController的updateAlarmLabelDelegate的执行者就会是AddAlarmViewController。
这时候Xcode会报错误:
这个错误的意思是:你已成为updateAlarmLabelDelegate的执行者,
所以你必须要实作updateAlarmLabelDelegate内的Function。
因此必须新增以下Code来让Xcode知道,你已实作updateAlarmLabelDelegate内的Function:
extension AddAlarmViewController: UpdateAlarmLabelDelegate {
func updateAlarmLabel(alarmLabelText: String) {
// 编写此Function的内容
}
}
那接着呢,要让画面上显示回传的文字,因此在Function内新增以下Code:
extension AddAlarmViewController: UpdateAlarmLabelDelegate {
func updateAlarmLabel(alarmLabelText: String) {
// 让第二行Cell的Detail显示回传回来的文字
self.addAlarmDetails[1] = alarmLabelText
}
}
来执行看看吧!
疑?没有用呀?
那是因为就算更改了阵列addAlarmDetails内的值,但是TableView并没有去抓最新的值,因此加上以下Code,
让addAlarmDetails阵列被更改後,TableView就会去更新最新的值:
var addAlarmDetails = ["永不","闹钟","雷达"] {
didSet {
// TableView重新抓取值
addAlarmTableView.reloadData()
}
}
再执行看看吧!
当你停止拿着别人的地图走在自己的人生道路上,那你的人生才算真正的开始。-Peter Su 因为在过...
If you are expecting to clear the Tableau Desktop ...
哈罗大家好~ 不知道昨天的进度条做的怎麽样? 想要交作业的人可以贴在昨天的留言区给我呦! 那我们今...
什麽是作用域 静态作用域:在语法解析时就确定作用域且不会再改变,JavaScript 属於此类,又称...
mysqli_num_rows() 取得查询笔数 可以使用 mysqli_num_rows() 函式...