《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

你可能感兴趣的:(《iOS 移动开发》读书笔记_第八章UITableView&UICollectionView)