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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)