UICollectionViewCell 中的 UICollectionView (Swift)

2023-11-26

我想放一个UICollectionView在每个可重复使用的UICollectionViewCell. The 灰犁沟方法对我来说效果不太好,因为使用一种UICollectionViewController两个数据源和委托的类UICollectionViews不起作用。

我最新的方法是将观点UICollectionViewController在每个单元格内,如中所述这个问题 and this doc。但是,当我尝试加载视图时,我的应用程序冻结了。在 Xcode 调试导航器中,CPU 恒定为 107%,几秒钟后内存接近 1GB。

在这个例子中,我试图得到一个ThumbnailCollectionViewController每一个MainCollectionViewControllerCell。每个人中唯一的一件事ThumbnailCollectionViewControllerCell是尺寸为 50x50 的图像。

如何正确完成此操作?

在 MainCollectionViewController 中

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! UICollectionViewCell

    let thumbsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ThumbnailColllection") as! ThumbnailCollectionViewController
    self.addChildViewController(thumbsViewController)
    thumbsViewController.view.frame = cell.bounds
    cell.addSubview(thumbsViewController.view)
    thumbsViewController.didMoveToParentViewController(self)
} 

缩略图 uiCollectionViewController

let reuseIdentifier = "ThumbCell"
let thumbnails = ["red", "green", "blue"]

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return thumbnails.count
}

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! UICollectionViewCell
    let cellImage = UIImage(named: thumbnails[indexPath.row])
    let cellImageView = UIImageView(image: cellImage)
    cellImageView.frame = cell.bounds
    cell.addSubview(cellImageView)

    return cell
}

你的方法UICollectionView每个单元格内部看起来都很好,但您很可能会看到糟糕的性能,因为您对单元格重用处理不当。每次请求新的可重用单元格时,您都会向单元格添加一个新的集合视图(实际上,向每个缩略图单元格添加一个新的图像视图)。如果连续滚动,那么单元格将会出列already添加这些子视图,因此每个单元格下最终都会有很多子视图。

相反,添加一种方法来检查单元格是否已经具有子视图,并且仅在没有子视图时才添加它。最好的方法可能是使用自定义单元子类:

class ThumbnailCollectionCell: UICollectionViewCell {
    var thumbnailViewController: ThumbnailCollectionViewController?
}

回到主 uiCollectionViewController:

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! ThumbnailCollectionCell
    if cell.thumbnailViewController == nil {
        let thumbsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ThumbnailColllection") as! ThumbnailCollectionViewController
        self.addChildViewController(thumbsViewController)
        thumbsViewController.view.frame = cell.bounds
        cell.addSubview(thumbsViewController.view)
        thumbsViewController.didMoveToParentViewController(self)
        cell.thumbnailViewController = thumbsViewController
    }
}

再说一次,类似的事情可以防止多重UIImageViews 被添加到每个缩略图单元格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UICollectionViewCell 中的 UICollectionView (Swift) 的相关文章

  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • 使用 Push Transition 效果更改 RootViewcontroller

    在我的iOS应用程序中 我需要更改应用程序之间窗口的rootviewController 因此 当我动态更改我的rootviewcontroller时 它会在更改之前轻拂视图 但我想要的是在更改rootviewcontroller时提供平滑
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • 使用隐藏的 SFSafariViewController 获取 Safari cookie

    我正在阅读以下关于从移动网页到本机 iOS 9 应用程序对用户进行身份验证的文章 并且想知道如何最好地实现类似于下面讨论的隐藏控制器的隐藏 safari 视图控制器 https library launchkit io how ios 9
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • Swift -boundingBox 导致 EXC_BAD_ACCESS (代码 = 1)

    我正在使用 SceneKit 来显示文本节点 这是我的代码 foo swift extension SCNNode func getNodeSize gt width Float height Float let min max bound
  • 从 RemoteIO 保存音频的示例?

    我进行了搜索 但没有找到任何从 RemoteIO 音频单元保存音频的好示例或教程 我的设置 使用 MusicPlayer API 我有几个 AUSamplers gt MixerUnit gt RemoteIO 音频播放效果很好 我想添加将
  • 如何使用自签名证书为 TLS 创建 iOS NWConnection?

    我正在尝试将 Apple 的新 NWConnection 类用于我的 MQTT 客户端 为了进行测试 我需要能够创建到本地测试代理的 TLS 连接 该代理具有自签名证书 到目前为止 我只是使用以下命令设置连接 self connection
  • Swift 如何设计 UIWebView 在 Story Board 中自动调整全屏大小

    我在 StoryBoard 中设计了一个 320x500 的 UIWebView 但是当在 Iphone 6 Plus 模拟器中运行时 我想要这个 webview 全屏或随设备屏幕缩放 如何在故事板中制作它 我在 ViewDidLoad 中
  • iPhone 标签栏上的未读计数

    在 Cocoa Touch 上实现 TabBar 上图标的未读计数的最佳方法是什么 我想模仿 SMS 或邮件应用程序的行为 向我的应用程序的用户显示未读消息计数 并使用包含数字的红点 您正在寻找的属性称为徽章 您可以通过执行以下操作来设置它
  • MKMapView 中显示多个注释标注

    是否可以同时打开多个标注 代码 void mapViewDidFinishLoadingMap MKMapView theMapView for id
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • 维护 UISegmentedControl 中的选择

    我可以保持 UISegmentViewControl 段的选定状态吗 即 即使用户选择了另一个段 也可以保持一个段显示为选中状态 我似乎在任何地方都找不到任何可以做到这一点的东西 这是不可能开箱即用的 看如何才能选择 UISegmented
  • 如何在 Xcode 4 中通过一个操作归档多个目标

    我有一个包含多个目标的项目 这些目标都适用于不同的 iOS 应用程序 例如 一个用于精简版的目标 另一个用于专业版的目标 我想立即构建并归档我的所有应用程序 目前 我对每个目标都有一个方案 我用它来独立归档每个应用程序 但现在我必须开始归档
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • 增加 NSData 的长度

    基本上 我有一个 46 个字符的 NSString 我将其转换为 NSData 我需要将字符串填充到 48 个字符 仅在 NSString 末尾添加 是行不通的 所以 我只是使用以下方法增加了 NSData 的长度 NSString str
  • 如何使导航栏透明并淡出,就像 iPhone 中的照片应用程序一样

    我是 iPhone 编程新手 有人可以帮我吗 我想在iPhone中开发一个类似照片应用程序的应用程序 如何使导航栏和工具栏透明并淡出 就像 iPhone 中的照片应用程序一样 感谢你 UINavigationBar继承自UIView 所以你
  • 下标:使用字符串枚举访问我的字典值

    我想做类似的事情 使用字符串枚举访问我的字典值 我试图重载字典的下标但没有成功 访问字典 let district address JsonKeys district 其中 JsonKeys 是 enum JsonKeys String c
  • 当设置 setVisibleXRangeMaximum 时,iOS-Charts X 轴值无限重复

    我正在尝试绘制一个图表 其中 x 轴是TimeIntervalY 轴是power consumption 由于每天都会有数据 因此将有太多数据无法显示 因此 我想一次显示 5 个值 我通过设置实现了这一点self chart setVisi

随机推荐

  • 在加特林场景之间共享数据

    我有一个场景 在包含用户名和密码的 CSV 文件的帮助下 获取会话 ID 并使用 saveAs 保存它们 我希望能够在以下场景中使用这些会话 ID 该场景执行一些需要会话 ID 的操作 此外 我还想将会话 ID 与其用户名相关联 所以本质上
  • WAMP 和 pcntl_fork

    有没有办法让 pcntl fork 在 WAMP 中工作 我需要开发一个分叉解决方案并在本地进行测试 不 这是不可能的 这PCNTL扩展需要 nix 平台 现在 话虽如此 你想做什么 你能在不分叉的情况下解决它吗 Edit 启动后台进程的一
  • angularjs $http.get 获取json在服务层不起作用

    我正在开发一个 AngularJS 应用程序 作为我的 AngularJS 学习的一部分 我有控制器 从那里我调用服务层 leagueManager service teamsService function http var teams
  • Python sys.stdout.flush() 不起作用

    下面的代码应该打印从 1 到 10 中间间隔 1 秒 但是它在实际打印任何内容之前等待 10 秒 然后一次性打印所有内容 如何取消缓冲输出 import sys import time for count in range 10 sys s
  • IE8 不会下载启用了 UAC 的自定义 mime/类型的文件

    我在本地计算机 Windows 7 x64 IE8 net 3 5 C 上运行一个 net 服务 该服务将文件返回到浏览器以响应用户操作 使用 firefox 或 chrome 可以正确下载文件 并且我们的应用程序通过自定义 mime 类型
  • Python上下文管理的成员变量?

    上下文管理器定义设置 清理功能 enter and exit 惊人的 我想保留一个作为成员变量 当我的类对象超出范围时 我希望执行此清理操作 据我所知 这基本上是 C 构造函数 析构函数自动发生的行为 class Animal object
  • Laravel 全局中间件无法获取会话

    protected middleware App Http Middleware Syspoint class use Session class Syspoint echo Session get syspoint 我有一个中间件需要在每
  • 如何在 PHP 中生成随机 64 位值作为十进制字符串

    Oauth 需要一个随机 64 位无符号数字 编码为十进制格式的 ASCII 字符串 你们能帮我用 php 实现这个吗 谢谢 这是一个非常有趣的问题 如何在 PHP 中创建任意长度随机数的十进制表示 不使用可选扩展 这是解决方案 步骤一 任
  • 使用 PHP 创建电子邮件帐户

    我正在尝试使用 PHP 创建电子邮件 这是我的代码 到目前为止它是非常基本的 直到我能得到一个工作脚本 这是我得到的最接近的 但它说它已经添加了电子邮件 尽管在 cpanel 中该电子邮件不存在 所以它显然不存在 请注意 出于安全原因 此代
  • 何时使用以及如何编写循环半代码[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我们什么时候使用循环半 另外 是否应该有人简要说明如何编写其代码 您可以使用循环半来避免
  • 每次我想使用数据库时是否都需要打开 MongoDB 连接?

    在我正在使用的示例中是以下代码 lets require import the mongodb native drivers var mongodb require mongodb We need to work with MongoCli
  • Laravel 中的“批量分配”是什么意思?

    当我浏览 Laravel Document 关于 Eloquent ORM 主题部分时 我得到了一个新术语 批量分配 文档显示如何进行批量分配以及 fillable or guarded属性设置 但经历了这些之后 我对 批量分配 以及它是如
  • 正则表达式 - 匹配句子中每个单词中除第一个字母以外的所有字母

    我几乎在这里得到了答案 但我遗漏了一些东西 我希望这里有人可以帮助我 我需要一个正则表达式来匹配句子中每个单词中除第一个字母之外的所有字母 然后我需要用正确数量的星号替换匹配的字母 例如 如果我有以下句子 There is an enorm
  • 通过 eclipseLink 生成 sql 时出现问题 - 缺少分隔符

    我正在将 eclipseLink 与 jpa 一起使用 在我的 persistence xml 中 我定义生成一个 create sql 文件 将生成该文件 但每个 sql 语句缺少 分隔符 是否可以在 persistence xml 中或
  • 从 Google Cloud Composer 运行 docker 运算符

    至于文档 Google Cloud Composer 气流工作节点由专用的 kubernetes 集群提供服务 我有一个包含 ETL 步骤的 Docker 我想使用气流运行它 最好在托管 Workers 的同一个 Kubernetes 上或
  • 如何在 DELETE 语句中使用行的物理位置 (ROWID)

    我有一个表 其中有很多重复的行并且没有主键 我只想删除重复的记录 但是当我尝试这样做时 它会删除所有对等记录 我怎样才能找到ROWID来自 Postgres 中的表 在 PostgreSQL 上 行的物理位置称为 CTID 因此 如果您想查
  • Spark 结构化流如何处理背压?

    我正在分析 Spark 结构化流的背压功能 有谁知道详情吗 是否可以通过代码调整流程传入记录 谢谢 如果您的意思是动态更改结构化流中每个内部批次的大小 那么NO 结构化流中没有基于接收器的源 因此完全没有必要 从另一个角度来看 Struct
  • 如何根据条件对 pandas 数据框进行切片?

    当我使用以下代码时 frioMurteira data loc data POM Murteira data TMP gt 7 2 DTM TMP 我收到以下错误 cannot compare a dtyped float64 array
  • Page-Break-inside 属性在 chrome 中不起作用

    我有一个长表数据 其中有许多行和嵌套表 当我打印这些数据时 表和嵌套表的行只是在分页符上断开 意味着表和数据被分成页面 所以我在那里使用以下 CSS 属性 table tr page break inside avoid position
  • UICollectionViewCell 中的 UICollectionView (Swift)

    我想放一个UICollectionView在每个可重复使用的UICollectionViewCell The 灰犁沟方法对我来说效果不太好 因为使用一种UICollectionViewController两个数据源和委托的类UICollec