ios/swift之tableview和collectionview联动

2024-05-31 09:32

本文主要是介绍ios/swift之tableview和collectionview联动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/**电商领域的左边的tableview和右边的collectionview联动*/import UIKit@available(iOS 11.0, *)
class LYBTabviewAndCollectionviewConnectview: UIView {var tabindex:Int=0//当前选中的左边tablecelloverride init(frame: CGRect) {super.init(frame: frame)addSubview(lefttabview)var leftkeyarr:[String]=[]//解析出第一层左边显示的数据var rightFirstfloorValueArr:[[[String:[String]]]]=[]//第一层右边的数据for (key,value) in rightdata{leftkeyarr.append(key)rightFirstfloorValueArr.append(value)}leftkeyarr =  leftkeyarr.reversed()//吧数组倒序排列print("\(leftkeyarr)")lefttabview.titleArr=leftkeyarr//左边tableview标题addSubview(rightcollectionview)//解析出第二层数据,组头和图片数据// 先去默认数据第一组数据rightFirstfloorValueArr = rightFirstfloorValueArr.reversed()let secDictArr:[[String:[String]]] = rightFirstfloorValueArr[0]let  secmodelArr:[LYBrightSecModel]=[LYBrightSecModel].deserialize(from: secDictArr)! as! [LYBrightSecModel]print("\(String(describing: secmodelArr.first?.headerName?.first))")rightcollectionview.modelArr = secmodelArr//重写属性,刷新右边的数据//选中tablecell,刷新collection view的数据lefttabview.selectcellBlock={(index)->()inself.tabindex=indexlet secDictArr:[[String:[String]]] = rightFirstfloorValueArr[self.tabindex]let  secmodelArr:[LYBrightSecModel]=[LYBrightSecModel].deserialize(from: secDictArr)! as! [LYBrightSecModel]print("\(String(describing: secmodelArr.first?.headerName?.first))")self.rightcollectionview.modelArr = secmodelArr//重写属性,刷新右边的数据}}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}//左边的tableviewlazy var lefttabview:LYBLefttabview={let lefttabv:LYBLefttabview=LYBLefttabview.init(frame: CGRect.init(x: 0, y:0, width: 100, height: Int(HEIGHT) - Int(TopSpaceHigh)-Int(bottomSafeHeight)))return lefttabv}()//右边的collectionviewlazy var rightcollectionview:LYBrightCollectionview={let rightcollectionv:LYBrightCollectionview=LYBrightCollectionview.init(frame: CGRect.init(x: 110, y:0, width: Int(WIDTH-110), height: Int(HEIGHT) - Int(TopSpaceHigh)-Int(bottomSafeHeight)))return rightcollectionv}()//第一层是左边显示的数据,下面是右边显示的数据,lazy var rightdata:[String:[[String:[String]]]]={let dataDict:[String:[[String:[String]]]]=["leftone":[["headerName":["one第一组"],"images":["icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel"]],["headerName":["one第二组"],"images":["comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark"]],["headerName":["one第三组"],"images":["comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark"]]],"lefttwo":[["headerName":["two第一组"],"images":["icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel"]],["headerName":["two第二组"],"images":["comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark"]],["headerName":["two第三组"],"images":["comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark"]]],"leftthree":[["headerName":["three第一组"],"images":["icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel","icon_shot_sel"]],["headerName":["three第二组"],"images":["comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark"]],["headerName":["three第三组"],"images":["comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark","comm_btn_checkmark"]]]]return dataDict}()}*******tabview
/***左边的tableview**/import UIKit@available(iOS 11.0, *)
class LYBLefttabview: UIView ,UITableViewDelegate,UITableViewDataSource{//标题数组var titleArr:[String]=[""]{didSet{tab.reloadData()}}//点击cell触发var selectcellBlock:(Int)->()={(Int)->()in}override init(frame: CGRect) {super.init(frame: frame)setTable()}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}func numberOfSections(in tableView: UITableView) -> Int {return 1}func tableView(_ tableView:UITableView, numberOfRowsInSection section: Int) -> Int {return titleArr.count;}func tableView(_ tableView:UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {let cell:LYBLefttabcell=tableView.dequeueReusableCell(withIdentifier:"LYBLefttabcell")as!LYBLefttabcellif(titleArr.count>0){cell.titlestr=titleArr[indexPath.row]}return cell}func tableView(_ tableView:UITableView, didSelectRowAt indexPath: IndexPath) {tableView.deselectRow(at: indexPath, animated:true)selectcellBlock(indexPath.row)print("点击")}//cell高度func tableView(_ tableView:UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {return 50}func setTable() {tab.tableFooterView=UIView.init()tab.delegate=selftab.dataSource=selfaddSubview(tab)tab.separatorStyle=UITableViewCell.SeparatorStyle.none//注册cell---UITableViewCell.classForCoder()或者UITableViewCell.selftab.register(LYBLefttabcell.self, forCellReuseIdentifier:"LYBLefttabcell")tab.showsVerticalScrollIndicator=falsetab.contentInsetAdjustmentBehavior=UIScrollView.ContentInsetAdjustmentBehavior.never}//懒加载---tablazy var tab:UITableView = {var tabv=UITableView.init(frame:CGRect(x:0,y:0,width:100,height:Int(HEIGHT)-49+Int(TopSpaceHigh)-Int(bottomSafeHeight)), style: UITableView.Style.plain)return tabv}()}
*******tabviewcell
/***左边tableviewcell*/import UIKitclass LYBLefttabcell: UITableViewCell {var imageStr:String="appstart"{didSet{imagev.image=UIImage.init(named: imageStr)}}var titlestr:String=""{didSet{tetxtlab.text=titlestr}}override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {super.init(style: style, reuseIdentifier: reuseIdentifier)initViews()}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}func initViews(){
//        addSubview(imagev)addSubview(tetxtlab)addSubview(horizontalLine)// 水平分割线addSubview(verticalLine)//竖分割线}//左边的图片lazy  var imagev:UIImageView={let imageV:UIImageView = UIImageView.init(frame: CGRect.init(x: 20, y: 10, width: 30, height:30))return imageV}()//中间的标题lazy var tetxtlab:UILabel={let textlbl:UILabel=UILabel.init(frame: CGRect.init(x: 0, y: 0, width: 100, height: 50))textlbl.textAlignment=NSTextAlignment.centerreturn textlbl}()//水平分割线lazy var horizontalLine:UIView={let horiLine:UIView=UIView.init(frame: CGRect.init(x: 0, y: 49, width: self.frame.size.width, height: 1))horiLine.backgroundColor=UIColor.grayreturn horiLine}()// 竖分割线lazy var verticalLine:UIView = {let vertiline:UIView=UIView.init(frame: CGRect.init(x: 99, y: 0, width: 1, height: 50))vertiline.backgroundColor=UIColor.grayreturn vertiline}()
}*******collectionview
/**右边的collectioview*/import UIKit@available(iOS 11.0, *)
class LYBrightCollectionview: UIView ,UICollectionViewDelegate,UICollectionViewDataSource {var collec:UICollectionView?//图片数组var modelArr:[AnyObject]=[]{didSet{collec?.reloadData()}}override init(frame: CGRect) {super.init(frame: frame)createCollectionView()}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}func createCollectionView(){let flowLayout = UICollectionViewFlowLayout.init()flowLayout.itemSize=CGSize.init(width:(WIDTH-110)/3, height:(WIDTH-110)/3)flowLayout.minimumLineSpacing=0flowLayout.minimumInteritemSpacing=0flowLayout.headerReferenceSize = CGSize.init(width: WIDTH, height: 50)//组头的高度collec = UICollectionView.init(frame: CGRect.init(x: 0, y: 0, width: Int(WIDTH-110), height: Int(HEIGHT)-Int(bottomSafeHeight)-Int(TopSpaceHigh)), collectionViewLayout: flowLayout)collec?.backgroundColor=UIColor.whitecollec?.delegate=selfcollec?.dataSource=selfcollec?.register(LYBrightcolllectioncell.classForCoder(), forCellWithReuseIdentifier: "LYBrightcolllectioncell")//注册组头collec!.register(LYBRightcolectionHeaderview.classForCoder(), forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "LYBRightcolectionHeaderview")addSubview(collec!)}func numberOfSections(in collectionView: UICollectionView) -> Int {return modelArr.count}func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {let model:LYBrightSecModel=modelArr[section] as! LYBrightSecModelreturn (model.images?.count)!}func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {let cell:LYBrightcolllectioncell = collectionView.dequeueReusableCell(withReuseIdentifier: "LYBrightcolllectioncell", for: indexPath) as! LYBrightcolllectioncellcell.backgroundColor=UIColor.redreturn cell}func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {print("点击colleccell")}//UICollectionElementKindSectionHeader和 kind 比较来区分header 和footerfunc collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {var headerView : LYBRightcolectionHeaderview = (collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "LYBRightcolectionHeaderview", for: indexPath as IndexPath) as? LYBRightcolectionHeaderview)!//分区头if kind == UICollectionView.elementKindSectionHeader{headerView = (collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "LYBRightcolectionHeaderview", for: indexPath as IndexPath) as? LYBRightcolectionHeaderview)!let model:LYBrightSecModel=modelArr[indexPath.section] as! LYBrightSecModelheaderView.headertitle=(model.headerName?.first)!}//分区尾else if kind == UICollectionView.elementKindSectionFooter{}return headerView}
}********collectionviewcell
/**右边的collectioviewcell*/import UIKitclass LYBrightcolllectioncell: UICollectionViewCell {var imageV:UIImageView!var image:String="appstart"{willSet(image) {}didSet {imageV.image=UIImage.init(named: image)}}override init(frame: CGRect) {super.init(frame: frame)createCell()}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}func createCell(){imageV = UIImageView.init(frame:CGRect.init(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height))imageV.image=UIImage.init(named: "appstart")addSubview(imageV)}
}*****collectionviewheader
/**右边的collectionviewHeader*/import UIKitclass LYBRightcolectionHeaderview: UICollectionReusableView {var headertitle:String=""{didSet{lab.text=headertitle}}override init(frame: CGRect) {super.init(frame: frame)initViews()}func initViews(){backgroundColor=UIColor.grayaddSubview(lab)}required init?(coder aDecoder: NSCoder) {fatalError("init(coder:) has not been implemented")}lazy var lab:UILabel={let lbl=UILabel.init(frame: CGRect.init(x: 0, y: 0, width: WIDTH, height: self.frame.size.height))lbl.text="便民"return lbl}()
}*****第一层模型
/**tableview和collectioncview的model*/
import UIKitclass LYBTabAndCollectionConnectModel: HandyJSON {var leftone:[LYBrightSecModel]?var lefttwo:[LYBrightSecModel]?var leftthree:[LYBrightSecModel]?required init(){}
}****第二层模型
/**右边第二层模型*/import UIKitclass LYBrightSecModel: HandyJSON {var headerName:[String]?var images:[String]?required init(){}
}

 

这篇关于ios/swift之tableview和collectionview联动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017687

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

iOS剪贴板同步到Windows剪贴板(无需安装软件的方案)

摘要 剪贴板同步能够提高很多的效率,免去复制、发送、复制、粘贴的步骤,只需要在手机上复制,就可以直接在电脑上 ctrl+v 粘贴,这方面在 Apple 设备中是做的非常好的,Apple 设备之间的剪贴板同步功能(Universal Clipboard)确实非常方便,它可以在 iPhone、iPad 和 Mac 之间无缝传输剪贴板内容,从而大大提高工作效率。 但是,iPhone 如何和 Wind

iOS项目发布提交出现invalid code signing entitlements错误。

1、进入开发者账号,选择App IDs,找到自己项目对应的AppId,点击进去编辑, 2、看下错误提示出现  --Specifically, value "CVYZ6723728.*" for key "com.apple.developer.ubiquity-container-identifiers" in XX is not supported.-- 这样的错误提示 将ubiquity

我的第一次份实习工作-iOS实习生-第三个月

第三个月 这个月有一个考核项目,是一个电子书阅读器,组长说很重要,是我的实习考核项目。 我的项目XTReader,这是我参考网上的一些代码,和模仿咪咕阅读做的,功能还不完善,数据的部分是用聚合数据做的。要收费的。   还有阅读页面,基本功能实现了一下。使用了autolayout,自适应布局,也是第一次用网络,第一次用数据库,第一次用自动布局。还有很多不足。 做了一周多,有个问题一直没

我的第一次份实习工作-iOS实习生-公司使用过的软件

bittorrentsync 素材,文件同步软件 cornerstone svn 软件开发合作 mark man 测量坐标的软件 SQLLite Manager 数据库操作软件

我的第一次份实习工作-iOS实习生-第二个月

第二个月 来公司过了一个月了。每天早上9点上班,到晚上6.30下班,上下班要指纹打卡,第一个月忘了打卡好多次(),然后还要去补打卡单。公司这边还安排了,工资卡办理,招商银行卡。开了一次新员工大会,认识了公司的一些过往,公司的要求等,还加了一下公司的企业QQ,还有其他的羽毛球群,篮球群。我加了下羽毛球群,也去打了一两次。第二个月的感受,感觉跟组里面的交流跟沟通都好少,基本上还有好多人不认识。想想也

我的第一次份实习工作-iOS实习生-第一个月

实习时间:2015-08-20 到 2015-12-25  实习公司;福建天棣互联有限公司 实习岗位:iOS开发实习生 第一个月: 第一天来公司,前台报道后,人资带我去我工作的地方。到了那,就由一个组长带我,当时还没有我的办公桌,组长在第三排给我找了一个位置,擦了下桌子,把旁边的准备的电脑帮我装了下,因为学的是iOS,实习生就只能用黑苹果了,这是我实习用的电脑。 帮我装了一下电脑后,开机

iOS如何隐藏系统状态栏

这里主要说明一下iOS7系统给状态栏的适配及隐藏带来的改变。 变化一: 不隐藏状态栏的情况下,StatusBar会直接显示在当前页面上,当前页面的会延伸到 StatusBar下方,顶到最上头。 这种显示方式在iOS7上是无法改变的,也无法通过设置或者配置类达到iOS6的状态栏效果。       所以在iOS7上进行页面布局的时候要考虑

Swift知识点---RxSwift学习

1. 什么是RxSwift RxSwift是Swift函数响应式编程的一个开源库,由Github的ReactiveX组织开发、维护 RxSwift的目的是:让数据/事件流 和 异步任务能够更方便的序列化处理,能够使用Swift进行响应式编程 RxSwift本质上还是观察者模式,并且是一个响应式的,并且可以序列化的 观察者模式 观察者模式包括:KVO、通知等 爸爸妈妈照看观察宝宝 其中,