《iOS 移动开发》读书笔记_第八章UITableView&UICollectionView

创建表格的代理协议与数据源协议:


        class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {}


代码创建表格对象:


        let tableView = UITableView(frame: CGRect)

        tableView.delegate = self

        tableView.dataSource = self

        self.view.addSubview(tableView)

            //viewDidLoad方法中


获得主屏的尺寸代码:


        let screenRect = UIScreen.main.bounds


表格对象行数的方法:


        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

            return Int

        }


表格初始化与Cell复用的方法:


        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let identifier = ""

            var cell = tableView.dequeueReusableCell(withIdentifier: identifier)

            if(cell == nil){

                cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: identifier)

            }

            return cell!

        }


UITableViewDatasource的主要代理方法_初始化与复用方法tableView(_:cellForRowAt:) //(必须)

UITableViewDatasource的主要代理方法_设置Cell行数的方法: tableView(_:numberOfRowsInSection:) (必须)

UITableViewDatasource的主要代理方法_设置Section的数量: numberOfSections(in:) 

UITableViewDatasource的主要代理方法_设置Section标题文字的方法: tableView(_:titleForHeaderInSecton:) 

UITableViewDatasource的主要代理方法_表格编辑模式方法: tableView(_:canEditRowAt:) 

UITableViewDatasource的主要代理方法_完成插入或删除事件后调用的方法: tableView(_:commit:forRowAt:) 

UITableViewDatasource的主要代理方法_设置Cell可移动的方法: tableView(_:canMoveRowAt:) 

UITableViewDatasource的主要代理方法_Cell移动调用的方法: tableView(_:moveRowAt:to:) 

Cell的预制Style_image-label:UITableViewCellStyle.default 

Cell的预制Style_image-label-label:UITableViewCellStyle.value1

Cell的预制Style_label-label:UITableViewCellStyle.value2

Cell的预制Style_image-label/small_label:UITableViewCellStyle.subtitle 

自定义Cell第一步: 新建一个swift文件(例如tableViewCellDiy.swift)

UITableviewCell.swift所属的类: class CustomizeUITableViewCell: UITableViewCell {}

自定义Cell初始化方法:


        override init(style: UITableViewCellStyle, reuseIdentifier: String?) {}

         required init?(coder aDecoder: NSCoder) {}


创建Cell的image:


        var thumbnail: UIImageView!

        override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

            super.init(style: style, reuseIdentifier: reuseIdentifier)

        }


创建Cell的label:


        var title: UILabel!

        override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

            super.init(style: style, reuseIdentifier: reuseIdentifier)

            self.title = UILabel(frame: CGRect(x: Int, y: Int, width: Int, height: Int))

            self.title.text = ""

            self.addSubview(self.title)

         }


创建Cell的button:


        var detail: UIButton!

        override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

            super.init(style: style, reuseIdentifier: reuseIdentifier)

            self.detail = UIButton(frame: CGRect(x: Int, y: Int, width: Int, height: Int))

            self.detail.setTitle("", for: UIControlState())

            self.addSubview(self.detail)

        }


自定义Cell文件(tableViewCellDiy.swift)与表格文件相关联:


        //在表格视图swift文件中,添加cellForRowAt方法

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let identifier = "reusedCell"

            var cell: tableViewCellDiy? = tableView.dequeueReusableCell(withIdentifier: identifier)as? tableViewCellDiy

            if cell == nil{

                cell = tableViewCellDiy(style: UITableViewCellStyle.default, reuseIdentifier: identifier)

            }

            return cell!

        }


表格Cell高度的方法(高度为80):


        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

            return 80

        }


UITableViewDelegate主要的代理方法 _设置Cell高度:tableView(_:heightForRowAt:) 

UITableViewDelegate主要的代理方法 _Cell将被显示调用的方法:tableView(_:willDisplay:forRowAt:) 

UITableViewDelegate主要的代理方法 _Cell被点击调用的方法:tableView(_:didSelectRowAt:) 

UITableViewDelegate主要的代理方法 _已被选中的Cell被点击调用的方法:tableView(_:didDeselectRowAt:) 

UITableViewDelegate主要的代理方法 _设置section的头部:tableView(_:viewForHeaderInSection:) 

UITableViewDelegate主要的代理方法 _设置section的尾部:tableView(_:viewForFooterInSection:) 

表格的section和索引:书第198页

响应Cell点击事件的方法: func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {}

被点击Cell附件的勾选图标代码:


        let cell = tableView.cellForRow(at: indexPath)

        if cell?.accessoryType == UITableViewCellAccessoryType.none {

            cell?.accessoryType = UITableViewCellAccessoryType.checkmark

        }else{

            cell?.accessoryType = UITableViewCellAccessoryType.none

        }

        //tableView(didSelectRowAt)方法中


Cell附件(UITableViewCellAccessoryType)类型_无: UITableViewCellAccessoryType.none 

Cell附件(UITableViewCellAccessoryType)类型_ⓘ:UITableViewCellAccessoryType.detailButton 

Cell附件(UITableViewCellAccessoryType)类型_ⓘ>:UITableViewCellAccessoryType.detailDisclosureButton 

Cell附件(UITableViewCellAccessoryType)类型_>:UITableViewCellAccessoryType.disclosureIndicator 

Cell附件(UITableViewCellAccessoryType)类型_✔️:UITableViewCellAccessoryType.checkmark 

表格的编辑模式:


        tableView.setEditing(editing: Bool, animated: Bool)

        //editing编辑模式(默认false),animated动画

        //viewDidLoad方法中


Cell编辑属性的方法(属性设置为删除):


        func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {

        return UITableViewCellEditingStyle.delete

        }


3.响应Cell删除事件的方法与代码:


        func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

            if editingStyle == UITableViewCellEditingStyle.delete {

            items.remove(at: indexPath.row)

            let indePaths = [indexPath]

             tableView.deleteRows(at: indePaths, with: UITableViewRowAnimation.automatic)

            }

        }

        //items是数据源变量



数组的长度: Array.count

UITableViewCell编辑类型_默认模式:UITableViewCellEditingStyle.none 

UITableViewCell编辑类型_删除模式:UITableViewCellEditingStyle.delete 

UITableViewCell编辑类型_插入模式:UITableViewCellEditingStyle.insert 

表格插入Cell代码:


        func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {

            return UITableViewCellEditingStyle.insert

        }

        func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

            if editingStyle == UITableViewCellEditingStyle.insert {

            items.insert("", at: indexPath.row)

            let indePaths = [indexPath]

            tableView.insertRows(at: indePaths, with: UITableViewRowAnimation.right)

            }

        }

        //items是数据源变量


表格移动Cell代码:


         func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {

            return true

        }

        func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {

            let fromRow = sourceIndexPath.row

            let toRow = destinationIndexPath.row

            let obj = items[fromRow]

            items.remove(at: fromRow)

            items.insert(obj, at: toRow)

        }

        //items是数据源变量


表格之间的嵌套:书第213页

213

表格Cell图标和高亮图标代码:


        cell?.imageView?.image = UIImage(named: “”)

        cell?.imageView?.highlightedImage = UIImage(named: “”)

        //tableView(cellForRowAt)方法中


Cell标题文字:cell?.textLabel?.text = ""  //tableView(cellForRowAt)方法中

Cell细节标题文字: cell?.detailTextLabel?.text = ""  //tableView(cellForRowAt)方法中

Cell背景颜色为蓝色: cell?.backgroundColor = UIColor.blue  //tableView(cellForRowAt)方法中

滑动到指定Cell:


        let indexPath = IndexPath(row: Int, section: Int)

        tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)

        //viewDidLoad方法中


获取当前Cell在section的行数:let rowNum = indexPath.row  //tableView(cellForRowAt)方法中

Cell的accessory按钮点击事件调用的方法: func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {}

UICollectionView实例:书第221-225

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容