Swift纯Code之旅 Day23. 「切割TableView(2) - 客制化TableViewHeader」

前言

昨天我们已经使用TableView的「titleForHeaderInSection()」将TableViewHeader做出来了,
但是可以发现TableViewHeader不论是底色或是字的颜色都不是我们要的,
因此今天就要来客制化一个View,并使用在TableViewHeader上面。

实作

首先先客制化一个View,这个View拥有几个特徵:

  • 黑色的背景色
  • 白色字体
  • 拥有一个Label (用来显示文字)

那就马上来实作View吧!

  1. 建立一个View,并命名为:「AlarmHeaderView」,内容为以下:

可以发现我们在实作Label时,并没有给他文字内容,因为两个TableViewHeader要显示的文字内容不同
因此等等在实作TableViewHeader时,再给他文字内容即可。

class AlarmHeaderView: UIView {
    // MARK: - Properties
    // MARK: - IBOutLets
    
    // 建立一个Label,用来显示文字
    let headerViewLabel: UILabel = {
        let label = UILabel()
        // 该Label的字体颜色为白色
        label.textColor = .white
        label.font = UIFont.boldSystemFont(ofSize: 20)
        return label
    }()
    
    // MARK: - Init
    override init(frame: CGRect) {
        super.init(frame: frame)
        // 该View的背景色为黑色
        self.backgroundColor = .black
        setViews()
        setLayouts()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    // MARK: - Function
    // MARK: - setViews
    func setViews() {
        self.addSubview(headerViewLabel)
    }
    // MARK: - setLayouts
    func setLayouts() {
        headerViewLabel.snp.makeConstraints { make in
            make.top.bottom.equalTo(self)
            make.leading.equalTo(self).offset(10)
        }
    }
}

2.回到「AlarmViewController」,并在TableView中的「viewForHeaderInSection()」加入以下Code

於此时将「AlarmHeaderView」内的 Label 加上文字。

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        switch section {
        case 0:
            // 建立一个View,这个View为我们建立的「AlarmHeaderView」
            let view: AlarmHeaderView = {
                let view = AlarmHeaderView()
                
                // 将该HeaderView的内容文字更改为:「睡眠|起床闹钟」
                view.headerViewLabel.text = "睡眠|起床闹钟"
                
                // 回传该View,作为第一个Setcion的HeaderView
                return view
            }()
            return view
        case 1:
            // 建立一个View,这个View为我们建立的「AlarmHeaderView」
            let view: AlarmHeaderView = {
                let view = AlarmHeaderView()
                
                // 将该HeaderView的内容文字更改为:「其他」
                view.headerViewLabel.text = "其他"
                
                // 回传该View,作为第一个Setcion的HeaderView
                return view
            }()
            return view
        default:
            break
        }
        return UIView()
    }

上述程序码的功用是:将我们创建的「AlarmHeaderView」当作是TableView的HeaderView,
因此现在画面应该会像下面这样
https://ithelp.ithome.com.tw/upload/images/20211003/20108999ucQrj9YFwi.png

/images/emoticon/emoticon07.gif/images/emoticon/emoticon07.gif/images/emoticon/emoticon07.gif/images/emoticon/emoticon07.gif/images/emoticon/emoticon07.gif/images/emoticon/emoticon07.gif


如果不太能理解的话,可以稍微去动动「AlarmHeaderView」的属性,例如背景色将它更改为蓝色

override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = .systemBlue
        setViews()
        setLayouts()
    }

再执行看看,就可以发现TableView的HeaderView的背景色也变成蓝色了
https://ithelp.ithome.com.tw/upload/images/20211003/201089993qu218MOqJ.png


<<:  冒险村18 - Config

>>:  Day-22 树(Tree), 二元搜寻树(Binary Search Tree)

错误处理

Golang 错误处理 首先要引入 errors 套件,大致上的用法是使用 errors.New(&...

[Deploy to Render] 什麽是 Render

什麽是 Render? 身为一个网路软件开发者,程序写完测完本机跑完後,下一个问题就是要部署在哪里了...

DAY15 服务室--JSON Server自己开

前言 我们现在有了 Nuxt.js 建立的环境、有了 Vuex 来做资料的处理,现在就差资料要从哪里...

【Day1】odoo的基础知识

也许你还没听过odoo,但身为开发人员当你认识odoo後,会有相见恨晚的感觉!! odoo,他可以是...

第06天 - 一些些的 MySQL(上)

今天来看看 MySQL 该怎麽用 第1部分 - 进到 MySQL 画面 1.先打开 XAMPP 2....