Swift纯Code之旅 Day14. 「TableView(5) - 点击TableViewCell」

前言

我们现在画面都已经跟Iphone内建的闹钟一样了,但虚有其表是不行的,
马上来实作TableViewCell的点击功能吧!
今天会先实作较单纯的「标签」栏位。
https://ithelp.ithome.com.tw/upload/images/20210924/20108999sN6kMomWHk.png

实作

想要让TableViewCell点击後有功能,就必须实作TableView Delegate & DataSource内的
didSelectRowAt(),让我们先新增以下的Code:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        switch indexPath.row {
        // 点击第一栏时,要做什麽
        case 0:
            break
        // 点击第二栏时,要做什麽
        case 1:
            break
        // 点击第三栏时,要做什麽
        case 2:
            break
        // 点击第四栏时,要做什麽
        case 3:
            break
        default:
            break
        }
    }

由於我们是要做第二个栏位的内容,因此需要在Case 1做更动,
那我们看一下IPhone点下第二个栏位时会做什麽事:

可以看到点下去後,会有一个新画面由右而左出现,
因此我们需要加新增一个ViewController,将其命名为:「AlarmLabelViewController」

class AlarmLabelViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        initView()
    }
    
    func initView() {
        self.view.backgroundColor = .white
    }
}

之後在TableView的「didSelectRowAt()」新增以下程序码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        switch indexPath.row {
        // 点击第一栏时,要做什麽
        case 0:
            break
        // 点击第二栏时,要做什麽
        case 1:
            let vc = AlarmLabelViewController()
            // 使用navigationController的pushViewController(),达到画面由右至左的效果。
            self.navigationController?.pushViewController(vc, animated: true)
        // 点击第三栏时,要做什麽
        case 2:
            break
        // 点击第四栏时,要做什麽
        case 3:
            break
        default:
            break
        }
    }

现在应该会像以下这样:

接着只要实作AlarmLabelViewController()的画面:

class AlarmLabelViewController: UIViewController {

    let alarmLabelTextField: UITextField = {
        let textField = UITextField()
        textField.text = "闹钟"
        textField.textColor = .white
        textField.backgroundColor = #colorLiteral(red: 0.1537905931, green: 0.1488661468, blue: 0.1617964804, alpha: 1)
        textField.clearButtonMode = .whileEditing
        textField.borderStyle = .roundedRect
        textField.font = UIFont.systemFont(ofSize: 20)
        return textField
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        initView()
        setViews()
        setLayouts()
    }
    
    func initView() {
        // 设定这个ViewController的背景色
        self.view.backgroundColor = #colorLiteral(red: 0.1097886786, green: 0.1098149046, blue: 0.1183715835, alpha: 1)
        // 设定NavigationBar的文字
        self.title = "标签"
        // 设定navigation BackButton Color
        self.navigationController?.navigationBar.tintColor = .orange
    }
    
    func setViews() {
        self.view.addSubview(alarmLabelTextField)
    }
    
    func setLayouts() {
        alarmLabelTextField.snp.makeConstraints { make in
            make.top.equalTo(self.view).offset(300)
            make.centerX.equalTo(self.view)
            make.width.equalTo(self.view)
            make.height.equalTo(50)
        }
    }
}

明天就来説说新手都头痛的Delegate传值罗


<<:  [Day 19] 突如其来的需求变更!来聊函数式编程

>>:  Day 24-Unit Test 应用於 ORM (以 Entity Framework 为例) (情境及应用-4)

DAY 27- 地址 Address

「我家今晚没人,这是我的地址。」 我们昨天介绍了区块链的基本架构, 知道交易纪录如何在区块链上保存、...

【踩坑】animation 选单按钮动起来(复习篇)

某天闲晃网站时看到一个充满魔性的选单按钮 是这个样子的 图源:https://www.pintere...

强人PM与敏捷相遇 -2

虽然想把这些敏捷有关的精神导入团队中,但自己仍不愿意对外说在执行敏捷的流程。其中一个最大的差异,是在...

24.MYSQL NOT IN指令

有了IN就会有NOT IN,而写法跟用法一样的,就是不包含写的条件都会列出来 另外值得注意的是,IN...

利用 Grafana Operator 部署 Grafana 到 OpenShift,并建立客制化的 Dashboard。

在前篇文章中,我已经将 Grafana Operator 部署到 "brandon&quo...