首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift UICollectionView的工作方式很奇怪,只注册第二次点击

UICollectionView是iOS开发中常用的视图容器,用于展示多个项目的集合视图。它类似于UITableView,但具有更灵活的布局和展示方式。

在使用UICollectionView时,需要注册cell和supplementary view的类或Nib文件,以便在需要时进行重用。注册的目的是告诉UICollectionView在需要显示特定类型的cell或supplementary view时,从重用队列中获取已注册的实例。

通常情况下,我们在UICollectionView的数据源方法中注册cell和supplementary view,例如在collectionView(_:cellForItemAt:)方法中注册cell。但是,如果只在第一次点击时注册,可能会导致第一次点击时无法正确显示cell或supplementary view。

这是因为UICollectionView在首次显示之前并不会立即加载所有的cell和supplementary view,而是根据需要进行懒加载。因此,如果只在第一次点击时注册,那么在首次显示时,UICollectionView无法从重用队列中获取已注册的实例,从而导致显示异常。

为了解决这个问题,我们应该在UICollectionView的初始化方法中或者在数据源方法之前,提前注册所有可能使用的cell和supplementary view。这样,无论何时需要显示这些视图,UICollectionView都能够正确地从重用队列中获取已注册的实例。

以下是一个示例代码,展示了如何注册cell和supplementary view:

代码语言:txt
复制
// 在UICollectionView初始化方法中提前注册cell和supplementary view
collectionView.register(MyCell.self, forCellWithReuseIdentifier: "cellIdentifier")
collectionView.register(MySupplementaryView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "headerIdentifier")

// 数据源方法中使用已注册的cell和supplementary view
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellIdentifier", for: indexPath) as! MyCell
    // 配置cell
    return cell
}

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "headerIdentifier", for: indexPath) as! MySupplementaryView
    // 配置headerView
    return headerView
}

在上述示例中,我们在UICollectionView初始化方法中提前注册了MyCellMySupplementaryView,并在数据源方法中使用已注册的实例。

总结: UICollectionView的工作方式并不奇怪,只是需要正确地注册cell和supplementary view,以确保在需要时能够正确地从重用队列中获取已注册的实例。提前注册所有可能使用的视图是一个良好的实践,可以避免显示异常。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Swift纯代码走进UICollectionView

    2.jpg Swift对于一门新iOS编程语言,他崛起是必然 我们这群老程序员们学习新技能也是必然 不接受新技能将被这大群体无情淘汰 So 我欣然接受这门看似不成熟语言 下面我们说说...Swift中比较常见控件UICollectionView 首先我们设置一个全局UICollectionView和一个数据源 var colltionView : UICollectionView....registerClass(Home_Cell.self, forCellWithReuseIdentifier:"cell") //注册一个headView colltionView...没错,我们headview是不是还没整啊? 接下来呢,我们看下UICollectionViewheadview该怎么设置 重点在这里!...更多经验请点击 原文在:http://www.allluckly.cn/ 最终效果图如下 Swift_CollTionView.gif 推荐一款学习iOS开发app_____|___

    3.2K20

    Swift 探索 UICollectionView 之 SupplementaryView 和 Decoration View

    时候,将需要添加到 UICollectionView section 里 headerView 和 footerView 先注册一下,它里面的三个参数分别代表是: 1.所要添加视图类本身,例如...来表示3.注册视图标识符,用于 UICollectionView 在加载视图时候能分辨加载是 header 还是 footer 还是普通 cell 第二个方法是 UICollectionViewDataSource...为 UICollectionView 添加 Supplementary View 首先看下效果图: 具体代码逻辑如下,注释已经在代码中添加: // // BaseAPIViewController.swift...新建一个继承自 UICollectionReusableView 类,代码如下: // // DecorationView.swift // SwiftScrollBanner // // Created...,返回与 rect 位置相交属性 attrs!.

    2.1K10

    iOS流水布局UICollectionView简单使用引实现结

    引 开发中我们最常看到可能是表视图UITableView了,但其实还有一个视图也常见,特别是一些图片、商品、视频展示界面,用UICollectionView来展现往往会更加方便。...如果熟悉UITableView的话,其实很多地方都是类似的,甚至可以说UITableView是一种特殊UICollectionView,正如正方形是一种特殊矩形一样,UITableView就是一种每行放一个方块...还可以设置为水平滚动,只需要改变布局参数设置就可以了;UICollectionViewcell只能通过注册来确定重用标识符,什么叫注册,我们还是看代码: - (void)viewDidLoad {...接下来就是对于DataSource和Delegate设置,这和UITableView非常像,DataSource决定显示效果,Delegate处理点击等响应,直接看代码: #pragma mark...使用方式,就像UITableView可以简单也可以做非常多样,UICollectionView也是一种乍看平常但可以容纳非常多想象力布局方式,只要善加利用就可以做出很好效果,当然,什么时候用UICollectionView

    1.1K00

    Swift 自定义布局实现 Cover Flow 效果

    写在开头 大家早上好,今天我又给大家带来了一篇关于 UICollectionView 系列文章,在上一篇文章中,我们实现了一个酷炫瀑布流布局,带大家初步了解了在 UICollectionView...滚动方向是横向 随着 UICollectionView 滚动,Cell 会自动进行缩放,当 Cell 中心点与 UICollectionView 中心点重合时放大,偏离中心点时缩小 Cell...首先,要实现 UICollectionView 支持横向滚动,很简单,仅需要设置 UICollectionFlowLayout 布局对象中 scrollDirection 为 horizontal...,那剩下就是在视图控制器中呈现了,这一步实现起来很简单,也不做赘述了,直接看源码: // // CoverFlowViewController.swift // SwiftScrollBanner...= false collectionView.dataSource = self collectionView.delegate = self // 注册

    1.7K20

    Swift-低仿搜狐新闻标签页效果

    前言:先看下效果 Tips: 这是用Swfit写一个小Demo,用UICollectionView实现拖拽排序,点击排序效果。...我所用UICollectionView排序方法是系统默认方法,优点是比较简单,不用自己去计算太多。缺点是支持iOS 9.0以后版本。...在ViewController里自定义了两个数组,我频道(myChannels)和更多频道(moreChannels) 在点击+跳转到频道管理页面的点击方法里面有一个回调方法,即:将选中频道、以及自定义后频道回传到此页面...(方法均为UICollectionView提供方法,支持iOS 9.0以后版本) class HQChannelListViewController: UIViewController {...总结 用Swift第一个轮子,主要是给自己增加点积累,也练练Swift一些用法。

    1.9K40

    Swift多线程之Operation:异步加载CollectionView图片1. Operation 设置依赖关系2. 前置知识点内容3. CollectionView中图片进行异步加载

    isFinished = false startOperation() } else { isFinished = true } 有童鞋大概奇怪...给了get方法,没有给set方法。所以没有办法直接使用这个属性。 2.1.3 取消操作说明 operation不是说把属性isCancelled设置一下就好了。...image.png 有没有神奇?一个数组,简简单单就变成了两个数组。 Swift是支持一门函数式编程语言,Map是针对集合类型操作。...给item赋值图片重点地方代码: override func collectionView(_ collectionView: UICollectionView, willDisplay cell:...有钱大爷就点击下方打赏点卖笑钱,有力气就在github上给个星星✨。或者在评论里面咱们聊聊天,吹吹牛也行。hiahia~ 噢,预告一下。按照之前计划,下一篇应该是GCD基础。OMG,好枯燥。

    1.5K70

    精品资源汇总:(持续更新)

    点击上方蓝字关注我们 引言 欢迎大家来到#公众号:iOS逆向《精品资源汇总》目录 本文列出最受欢迎资源,以便供大家快速查找自己所需资料 文中蓝字都是超级链接,点击进入即可 I、iOS自定义视图相关热门资源.../article/details/104796781 2、功能:采集电子签名,支持签名界面为横屏其余页面都是竖屏、清除重写、灵活控制提示语信息、以及查看商户协议 3、核心原理:旋转特定屏幕 4、核心步骤...2、应用场景:商品详情页以及需要展示大量图片界面 3、核心原理 : 3.1)按照图片原来宽高比进行缩 3.2)UICollectionView高度自适应 II 蓝牙打印商品价格标签、交易小票...1、iOS《用户协议及隐私政策》弹框(包含超链接属性)【本文包含完整demo源码,demo支持中英文切换】 2、UICollectionView自适应案例详解:【商品详情页】(核心原理:按照图片原宽高比例进行显示图片全部内容...5、我已加入CSDN内容合伙人计划,亲爱各位粉丝,可以添加我CSDN官方微信号,和我近距离互动聊天,为您答疑解惑 #公众号:iOS逆向 CSDN认证博客专家 Swift SwiftUI Objective-C

    1K30

    苹果全新UI框架来了!可视化编程,自动化减少20%代码量

    开发者通过SwiftUI,利用Swift语法就能够完成代码和设计同步。 Swift是苹果最新开发语言,有人呼吁谷歌取代TensorFlowPython。目前在TOIBE排名18位: ?...一致性:这意味着Swift和Objective-C之间不会再看到奇怪错误,或者非常旧API与新API混合 简洁:可以节省10%-20%代码量 如果你刚刚接触SwiftUI,刚开始你可能需要适应一下...而SwiftUI通过4种方式,解决了上述问题: 用一个新声明式UI结构,定义了布局外观和工作方式 更新UI预览会自动生成新Swift代码,反之,更改Swift代码也会更新UI预览 Swift任何绑定例如有效...使用SwiftUI之前要注意事情 首先,SwiftUI目前支持10.15 beta以及更新macOS系统,当然10.15 beta已经是目前最新了。 其次一些可能出现小问题也是需要注意。...比如,它支持Swift,你不能在Obj-C里使用SwiftUI;SwiftUI目前还不是成熟,正在从事iOS开发程序员可能更应该继续使用Obj-C,直到SwiftUI足够成熟。

    5.4K20

    iOS 封装跑马灯和轮播效果

    iOS UICollectionView实现跑马灯和轮播效果.gif 功能描述:WSL_RollView 是基于UICollectionView实现支持水平和垂直两个方向上分页和渐进循环轮播效果...自定义分页宽度:默认分页宽度是UICollectionView宽度,所以当分页宽度不等于UICollectionView宽度或分页间隔不等于0时会出现错误,这时就需要我们通过自定义UICollectionViewFlowLayout...,前边尾首相连需要UICollectionView可见范围内数据源后边元素cell,后边首尾相连需要UICollectionView可见范围内数据源前边元素cell //获取首尾相连循环滚动时需要用到元素...,属性和用法明朗,详情和效果请前往我Github查看示例:WSL_RollView // // WSLRollView.h // WSL_RollView // // Created by...:(NSString *)identifier; /** 注册item样式 用法和UICollectionView相似 */ - (void)registerNib:(nullable UINib

    4.1K40

    【IOS开发基础系列】UICollectionView专题

    registerNib: forSupplementaryViewOfKind: withReuseIdentifier:         相比UITableView有两个主要变化:一是加入了对某个Class注册...,这样即使不用提供nib而是用代码生成view也可以被接受为cell了;二是不仅只是cell,Supplementary View也可以用注册方法绑定初始化了。...在对collection view重用ID注册后,就可以像UITableView那样简单写cell配置了:     MyCell*cell=[cvdequeueReusableCellWithReuseIdentifier...每个cell现在有独立高亮事件和选中事件delegate,用户点击cell时候,现在会按照以下流程向delegate进行询问:     • -collectionView: shouldHighlightItemAtIndexPath...objectAtIndex: indexPath.row];     return cell; } 2.3 UICollectionViewCell重用         UICollectionViewCell其实实例化了能应付一屏显示范围对象实例

    64230

    Swift入门:怎样安装Xcode和创建Playground

    所以,你第一个动作就是点击这里从Mac应用商店安装Xcode——下载量很大,所以现在就开始下载并继续阅读。...Swift 2是Swift第二次重大更新,引入了检查异常和许多其他重大改进。...Swift 3是Swift第三次重大更新,它带来了大量命名更改,使语言更容易编写,也更自然。 Swift 4是Swift第四次重大更新,主要关注有助于提高语言表达能力新功能。...iOS Simulator(模拟器)是Xcode附带一个工具,它外观和工作方式几乎与真正iPhone或iPad一模一样。它可以让你很快地测试iOS应用程序,而不必使用真正设备。...让我们开始吧… Swift Playground 简介 启动Xcode时,您将看到如下所示内容。寻找左下角“Get started with a playground”按钮,然后点击它。 ?

    6.2K10

    iOS开发 MVVM+RAC 使用Demo效果ReactiveCocoa简介Demo分析代码Demo地址

    比如按钮点击使用action,ScrollView滚动使用delegate,属性值改变使用KVO等系统提供方式。...其实这些事件,都可以通过RAC处理 ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件方便,可以把要处理事情,和监听事情代码放在一起,这样非常方便我们管理,就不需要跳到对应方法里...基础的话我还是推荐这篇博文 讲都挺细 当然不爽的话可以试试这个视频版,也是某培训机构流出 Demo分析 本文使用是豆瓣API(非官方) Demo所要做功能很简单: 从网络中请求数据,并加载到...{ UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout...make.bottom.equalTo(self.view.mas_bottom); }]; self.collectionView = collectionView; //注册

    1.7K40

    WWDC2016 Session笔记 - iOS 10 UICollectionView新特性

    UICollectionViewCell顺滑滑动体验 众所周知,iOS设备已良好用户体验赢得了广大用户群。iOS系统在用户点击屏幕会立即做出响应。而且很大一部分操作是来自于用户滑动操作。...针对上述掉帧情况,绘制出实验数据,如下图。值得我们关注是,曲线是曲折,非常不平滑。当用户大幅度滑动时候,峰值超过了16ms,当用户慢速滑动时候,帧率又能保持在比较顺滑区域。...这时我们每次加载一个cell,而不是每次加载一行cell。当第一个cell准备好之后再叫第二个cell准备。...最后,用cancelPrefetchingAPI去迎合用户滑动动作变换,比如说用户在快速滑动突然发现了有趣感兴趣事情,这个时候停下来滑动了,甚至快速反向滑动了,或者点击了事件,进去看详情了,这些时刻我们都应该开启...我感觉iOS 10UICollectionView才像是一个完整版,之前系统优化都不够。我还是看好iOS 10UICollectionView。 请大家多多指教。新浪微博@halfrost

    1.9K30
    领券