Swift纯Code之旅 Day16. 「页面传值?代理? Delegate?Protocol?(2)」

前言

目前已经将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会报错误:
https://ithelp.ithome.com.tw/upload/images/20210926/20108999zqdzLCdSMT.png

这个错误的意思是:你已成为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()
        }
    }

再执行看看吧!

/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif/images/emoticon/emoticon12.gif


<<:  《正因为很简单,就迷失在茫茫人海》

>>:  [Day11] 团队系统设计 - 估点系统 (上)

【Day30】时间只是考验,心中信念丝毫未减

当你停止拿着别人的地图走在自己的人生道路上,那你的人生才算真正的开始。-Peter Su 因为在过...

Updated and Reliable Tableau Desktop-Specialist BrainDumps

If you are expecting to clear the Tableau Desktop ...

Day 26:「按钮博物馆」- 轻松变化各种按钮元件

哈罗大家好~ 不知道昨天的进度条做的怎麽样? 想要交作业的人可以贴在昨天的留言区给我呦! 那我们今...

[ Day 28 ] - 作用域与范围链

什麽是作用域 静态作用域:在语法解析时就确定作用域且不会再改变,JavaScript 属於此类,又称...

铁人赛 Day13-- MySQL函式

mysqli_num_rows() 取得查询笔数 可以使用 mysqli_num_rows() 函式...