Swift - UITableView

Swift - UITableView,第1张

概述创建UITablView import UIKitclass ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{ var Names = ["A","B","C","D","E","F"] var tableView:UITableView! override 创建UITablVIEw
import UIKitclass VIEwController: UIVIEwController,UItableVIEwDataSource,UItableVIEwDelegate{        var names = ["A","B","C","D","E","F"]    var tableVIEw:UItableVIEw!    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        //创建表格图        self.tableVIEw = UItableVIEw(frame: self.vIEw.frame,style: .plain)        //将代理,数据来源设为自己        self.tableVIEw?.delegate = self        self.tableVIEw?.dataSource = self        //创建表头标签        let headerLabel = UILabel(frame: CGRect(x: 0,y: 0,wIDth: self.vIEw.bounds.wIDth,height: 30))        headerLabel.text = "header"        self.tableVIEw?.tableheaderVIEw = headerLabel                self.vIEw.addSubvIEw(tableVIEw)    }    //设置分区数(不设置默认为1)    func numberOfSections(in tableVIEw: UItableVIEw) -> Int {        return 1    }    //设置单元格数    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {        return names.count    }    //设置单元格内容    func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        //设置重用单元格名称        let IDentifIEr = "reusedCell"        //使用重用单元格        var cell = tableVIEw.dequeueReusableCell(withIDentifIEr: IDentify)        //如果单元格为nil创建重用单元格        if cell == nil{            cell = UItableVIEwCell(style: .default,reuseIDentifIEr: IDentify)        }        cell?.textLabel?.text = names[indexPath.row]        return cell!    }    //自定义单元格高度    func tableVIEw(_ tableVIEw: UItableVIEw,heightForRowAt indexPath: IndexPath) -> CGfloat {        return 40    }    //点击单元格响应时间    func tableVIEw(_ tableVIEw: UItableVIEw,dIDSelectRowAt indexPath: IndexPath) {        self.tableVIEw?.deselectRow(at: indexPath,animated: true)//使被点击的单元格的颜色立即恢复        let cell = tableVIEw.cellForRow(at: indexPath)        if cell?.accessoryType == UItableVIEwCell.AccessoryType.none{            cell?.accessoryType = .checkmark            print("你选择了:\(String(describing: cell?.textLabel?.text))")        }else{            cell?.accessoryType = .none        }    }    }
使用不同样式单元格
import UIKitclass CustomizetableVIEwCell: UItableVIEwCell {    var UserImage:UIImageVIEw!    var Username:UILabel!    var Detail:UIbutton!    overrIDe init(style: UItableVIEwCell.CellStyle,reuseIDentifIEr: String?) {        super.init(style: style,reuseIDentifIEr: reuseIDentifIEr)                self.UserImage = UIImageVIEw(image: UIImage(named: "UserImage"))        self.UserImage.center = CGPoint(x: 30,y: 22)                self.Username = UILabel(frame: CGRect(x: 80,wIDth: 120,height: 40))        self.Username.text = "自定义单元格"                self.Detail = UIbutton(frame: CGRect(x: 240,y: 8,wIDth: 60,height: 24))        self.Detail.setTitle("详情",for: .normal)        self.Detail.backgroundcolor = UIcolor.gray        self.Detail.addTarget(self,action: #selector(showDetail),for: .touchUpInsIDe)                self.addSubvIEw(self.Username)        self.addSubvIEw(self.UserImage)        self.addSubvIEw(self.Detail)    }    @objc func showDetail(){        print("显示详情信息")    }    required init?(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }    }
自定义UItableVIEwCell

创建一个Cocoa touch class文件,设置父类:UItableVIEwCell,名称为CustomizetableVIEwCell

编辑CustomizetableVIEwCell:

import UIKitclass CustomizetableVIEwCell: UItableVIEwCell {    var UserImage:UIImageVIEw!    var Username:UILabel!    var Detail:UIbutton!    overrIDe init(style: UItableVIEwCell.CellStyle,for: .touchUpInsIDe)                self.addSubvIEw(self.Username)        self.addSubvIEw(self.UserImage)        self.addSubvIEw(self.Detail)    }    @objc func showDetail(){        print("显示详情信息")    }    required init?(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }    }

编辑VIEwController:

import UIKitclass VIEwController: UIVIEwController,UItableVIEwDelegate{    var user = ["A","C"]    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        let tableVIEw = UItableVIEw(frame: self.vIEw.frame)        tableVIEw.dataSource = self        tableVIEw.delegate = self        self.vIEw.addSubvIEw(tableVIEw)    }    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {       return user.count    }        func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let IDentifIEr = "reusedCell"        var cell:CustomizetableVIEwCell? = tableVIEw.dequeueReusableCell(withIDentifIEr: IDentifIEr) as? CustomizetableVIEwCell        if cell == nil{            cell = CustomizetableVIEwCell(style: .default,reuseIDentifIEr: IDentifIEr)        }        cell?.Username.text = user[indexPath.row]        return cell!    }}
给文章添加章节和索引
import UIKitclass VIEwController: UIVIEwController,UItableVIEwDelegate{        var Section = ["A","F","G","H","I","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","z"]    var Content =   [["1","2","3"],["3","4"],["5","6"],["7","8"],["9","10"],["11","12"],["13","14"],["15","16"],["12","21"],["1","1"],"1"]]    var tableVIEw:UItableVIEw!    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        //创建表格图        self.tableVIEw = UItableVIEw(frame: self.vIEw.frame,style: .grouped)        self.tableVIEw?.delegate = self        self.tableVIEw?.dataSource = self        //创建表头标签        let headerLabel = UILabel(frame: CGRect(x: self.vIEw.bounds.wIDth/2,height: 30))        headerLabel.text = "添加章节和索引"        self.tableVIEw?.tableheaderVIEw = headerLabel        self.vIEw.addSubvIEw(tableVIEw)        print(Content.count)    }    //设置分区数(不设置默认为1)    func numberOfSections(in tableVIEw: UItableVIEw) -> Int {        return Section.count    }    //设置单元格数    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {        return Content[section].count    }    //设置单元格表头    func tableVIEw(_ tableVIEw: UItableVIEw,TitleForheaderInSection section: Int) -> String? {        return self.Section[section]    }    //设置单元格表尾    func tableVIEw(_ tableVIEw: UItableVIEw,TitleForFooterInSection section: Int) -> String? {        return "有\(self.Content[section].count)个控件"    }    //设置索引内容    func sectionIndexTitles(for tableVIEw: UItableVIEw) -> [String]? {        return self.Section    }    //设置单元格内容    func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let IDentifIEr = "reusedCell"        var cell = tableVIEw.dequeueReusableCell(withIDentifIEr: IDentify)        if cell == nil{            cell = UItableVIEwCell(style: .default,reuseIDentifIEr: IDentify)        }        let section = indexPath.section        var data = self.Content[section]        cell?.textLabel?.text = data[indexPath.row]        return cell!    }    //点击单元格响应时间    func tableVIEw(_ tableVIEw: UItableVIEw,animated: true)//使被点击的单元格的颜色立即恢复        let section = indexPath.section        var data = self.Content[section]        let alertController = UIAlertController(Title: "提示",message: "你点击了:\(data[indexPath.row])",preferredStyle: .alert)        let ok = UIAlertAction(Title: "确定",style: .default,handler: nil)        alertController.addAction(ok)        present(alertController,animated: true,completion: nil)    }    }
单元格的删除,插入,移动
import UIKitclass VIEwController: UIVIEwController,UItableVIEwDelegate{    var SectionNum = ["delete","insert","move"]    var Content = [["A","B"],["C","D"],["E","F"]]    var tableVIEw:UItableVIEw!    overrIDe func vIEwDIDLoad() {     super.vIEwDIDLoad()        tableVIEw = UItableVIEw(frame: self.vIEw.frame)        tableVIEw.dataSource = self        tableVIEw.delegate = self        //设置是否为编辑模式        tableVIEw.setEditing(false,animated: true)        self.vIEw.addSubvIEw(tableVIEw)        //添加一个手势来开启/关闭编辑模式        let Tap = UITapGestureRecognizer(target: self,action: #selector(OpenEdit))        Tap.numberOfTapsrequired = 2        Tap.numberOftouchesrequired = 1        self.vIEw.addGestureRecognizer(Tap)            }    @objc func OpenEdit(){        if self.tableVIEw.isEditing{            tableVIEw.setEditing(false,animated: true)        }else{            tableVIEw.setEditing(true,animated: true)        }    }    //设置区域数    func numberOfSections(in tableVIEw: UItableVIEw) -> Int {        return SectionNum.count    }    //设置行数    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {        let data = Content[section]        return data.count    }    //设置内容    func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let IDentifIEr = "reusedCell"        var cell = tableVIEw.dequeueReusableCell(withIDentifIEr: IDentifIEr)        if cell == nil{            cell = UItableVIEwCell(style: .default,reuseIDentifIEr: IDentifIEr)        }        let data = Content[indexPath.section]        cell?.textLabel?.text = data[indexPath.row]        return cell!    }    //设置章节名称    func tableVIEw(_ tableVIEw: UItableVIEw,TitleForheaderInSection section: Int) -> String? {        return SectionNum[section]    }    //设置编辑状态下显示的图标(none,insert,delete三种图案)    func tableVIEw(_ tableVIEw: UItableVIEw,editingStyleForRowAt indexPath: IndexPath) -> UItableVIEwCell.EditingStyle {        if indexPath.section == 0{            return UItableVIEwCell.EditingStyle.delete        }else if indexPath.section == 1{            return UItableVIEwCell.EditingStyle.insert        }        return UItableVIEwCell.EditingStyle.none    }    //使用删除,插入执行此方法    func tableVIEw(_ tableVIEw: UItableVIEw,commit editingStyle: UItableVIEwCell.EditingStyle,forRowAt indexPath: IndexPath) {        if editingStyle == .delete{            self.Content[indexPath.section].remove(at: indexPath.row) //删除选项,并设置删除的效果            //更新表格数据            self.tableVIEw.reloadData()        }else {            self.Content[indexPath.section].insert("F",at: indexPath.row)            self.tableVIEw.reloadData()                    }    }    //修改删除提示的问题    func tableVIEw(_ tableVIEw: UItableVIEw,TitleForDeleteConfirmationbuttonForRowAt indexPath: IndexPath) -> String? {        return "X"    }    //设置单元格的位置可以拖动    func tableVIEw(_ tableVIEw: UItableVIEw,canMoveRowAt indexPath: IndexPath) -> Bool {        if indexPath.section == 2{            return true        }        return false    }    //移动完单元格调用此方法    func tableVIEw(_ tableVIEw: UItableVIEw,moveRowAt sourceIndexPath: IndexPath,to destinationIndexPath: IndexPath) {        print("你使用了此方法")        let formRow = sourceIndexPath.row        let toRow = destinationIndexPath.row        let formContent = Content[formRow]        Content.remove(at: formRow)        Content.insert(formContent,at: toRow)        }    }
tableVIEwCell嵌套
import UIKitclass VIEwController: UIVIEwController,UItableVIEwDelegate{    var articles = ["A","B"]    var Contents = ["1","2"]    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        let tableVIEw = UItableVIEw(frame:self.vIEw.frame)        tableVIEw.delegate = self        tableVIEw.dataSource = self        tableVIEw.separatorStyle = .none        self.vIEw.addSubvIEw(tableVIEw)    }    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {        return articles.count*2    }        func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let IDA = "articlesCell"        let IDB = "ContentsCell"        var CellA:UItableVIEwCell?        var CellB:UItableVIEwCell?        if indexPath.row%2 == 0{            CellA = tableVIEw.dequeueReusableCell(withIDentifIEr: IDA)            if CellA == nil{                CellA = UItableVIEwCell(style: .default,reuseIDentifIEr: IDA)            }            CellA?.textLabel?.text = articles[indexPath.row/2]            return CellA!        }else{            CellB = tableVIEw.dequeueReusableCell(withIDentifIEr: IDB)            if CellB == nil{                CellB = UItableVIEwCell(style: .default,reuseIDentifIEr: IDB)            }            CellB?.textLabel?.text = Contents[indexPath.row/2]            return CellB!        }    }        }
嵌套自定义单元格

创建一个自定义swift文件,父类为UItableVIEwCell,名称为CustomizetableVIEwCell
编辑CustomizetableVIEwCell:

import UIKitclass CustomizetableVIEwCell: UItableVIEwCell,UItableVIEwDelegate {    var tableVIEw:UItableVIEw!    var Content:[String] = []    overrIDe init(style: UItableVIEwCell.CellStyle,reuseIDentifIEr: reuseIDentifIEr)        //进行初始化,后续在进行更改        tableVIEw = UItableVIEw(frame: CGRect(x: 0,wIDth: 300,height: 50))        tableVIEw.dataSource = self        tableVIEw.delegate = self        //设置是否允许滑动(设为false,防止内容跟着手指滑动而滑动)        tableVIEw.isScrollEnabled = false        tableVIEw.separatorStyle = .none        self.addSubvIEw(tableVIEw)    }    //设置单元格数量    func tableVIEw(_ tableVIEw: UItableVIEw,numberOfRowsInSection section: Int) -> Int {        return Content.count    }    //设置单元格内容    func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let ID = "reusedCell"        var cell = tableVIEw.dequeueReusableCell(withIDentifIEr: ID)        if cell == nil{            cell = UItableVIEwCell(style: .default,reuseIDentifIEr: ID)        }        cell?.textLabel?.text = Content[indexPath.row]        cell?.textLabel?.Font = UIFont.systemFont(ofSize: 12)        cell?.textLabel?.numberOflines = 0        return cell!    }    //设置单元格高度    func tableVIEw(_ tableVIEw: UItableVIEw,heightForRowAt indexPath: IndexPath) -> CGfloat {        let ContentNum = Content[indexPath.row]        //计算内容高度(ContentSize.wIDth/170计算有多少行文字)        let ContentSize = ContentNum.boundingRect(with: CGSize(),options: NsstringDrawingOptions.usesFontLeading,attributes: nil,context: nil)        let cellHeight = ContentSize.height*(ContentSize.wIDth/170)        if cellHeight < 30{            return 30        }else{            return cellHeight        }    }    //根据数据源内容来设置UItableVIEw高度(+50防止内容拥挤)    func setContentFortable(_ content:[String]){        self.Content = content                var tableHeight:CGfloat = 0        for i in 0..<content.count        {            let ContentSize = Content[i].boundingRect(with: CGSize(),context: nil)        tableHeight += ContentSize.height*(ContentSize.wIDth/170)        }        tableVIEw.frame = CGRect(x: 20,height: tableHeight + 50)        tableVIEw.reloadData()    }    func getMyHeight()->CGfloat{        return tableVIEw.frame.size.height    }        required init?(coder aDecoder: NSCoder) {        fatalError("init(coder:) has not been implemented")    }    }

编辑VIEwController:

import UIKitclass VIEwController: UIVIEwController,UItableVIEwDelegate{    var articles = ["徐志摩","克莱儿?麦克福尔","东野圭吾"]    var Contents = [["我是天空里的一片云,偶尔投影在你的波心,你不必讶异,更无须欢喜,在转瞬间消灭了踪影。你我相逢在黑夜的海上,你有你的,我有我的,方向,你记得也好,最好你忘掉,在这交会时互放的光亮"],["当灵魂休眠的时候,我敢肯定它们得到了片刻的平静和安宁。111111111111111111111111"],["你我都不可能摆脱时钟的束缚,彼此都已沦为社会这个时钟的齿轮,一旦少了齿轮,时钟就会出乱子。纵然自己渴望率性而为,周遭也不容许,我们虽然得到了安定,但失去自由也是不争的事实。"]]    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        let tabVIEw = UItableVIEw(frame:CGRect(x: 0,y: 20,height: self.vIEw.bounds.height))        tabVIEw.delegate = self        tabVIEw.dataSource = self        tabVIEw.separatorStyle = .none        self.vIEw.addSubvIEw(tabVIEw)    }    func tableVIEw(_ tableVIEw: UItableVIEw,cellForRowAt indexPath: IndexPath) -> UItableVIEwCell {        let IDA = "cellForArticles"        let IDB = "cellForContent"                var cell1:UItableVIEwCell?        var cell2:CustomizetableVIEwCell?                if indexPath.row%2 == 0{            cell1 = tableVIEw.dequeueReusableCell(withIDentifIEr: IDA)            if cell1 == nil{                cell1 = UItableVIEwCell(style: .default,reuseIDentifIEr: IDA)            }            cell1?.textLabel?.text = articles[indexPath.row/2]            cell1?.textLabel?.textcolor = UIcolor.gray            cell1?.backgroundcolor = UIcolor.black            cell1?.textLabel?.Font = UIFont.systemFont(ofSize: 16)            return cell1!        }else{            cell2 = tableVIEw.dequeueReusableCell(withIDentifIEr: IDB) as? CustomizetableVIEwCell            if cell2 == nil{                cell2 = CustomizetableVIEwCell(style: .default,reuseIDentifIEr: IDB)            }            let content = Contents[indexPath.row/2]            cell2?.setContentFortable(content)            return cell2!        }    }    func tableVIEw(_ tableVIEw: UItableVIEw,heightForRowAt indexPath: IndexPath) -> CGfloat {        if indexPath.row % 2 == 0{            return 40        }else{            let Content = Contents[indexPath.row/2]            var cellHeight:CGfloat = 0            for i in 0..<Content.count{                let ContentSize = Content[i].boundingRect(with: CGSize(),context: nil)                cellHeight += ContentSize.height*(ContentSize.wIDth/170)            }            return cellHeight + 50        }    }}
总结

以上是内存溢出为你收集整理的Swift - UITableView全部内容,希望文章能够帮你解决Swift - UITableView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1021059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存