首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自定义UITableViewCell中快速可变数量的子视图

自定义UITableViewCell中快速可变数量的子视图
EN

Stack Overflow用户
提问于 2015-08-05 21:36:47
回答 1查看 635关注 0票数 2

我有一个显示自定义单元格的UITableView。每个单元格包含一个滚动视图、一个图像视图和几个文本标签。这些都已经在故事板中设置好了。我在cellForRowAtIndexPath中设置了文本标签和图像视图的各种属性。到目前为止很简单。

现在,我需要在每个单元格的滚动视图中添加数量可变的图像。目前,我更新了滚动视图的内容大小,并调用cell.contentView.addSubviewcellForRowAtIndexPath中添加这些图像。不幸的是,这似乎会导致内存泄漏。

如果我在表视图上上下滚动多次,它会变得非常不稳定和缓慢。我怀疑我添加到单元格的子视图没有被释放。每次调用'cellForRowAtIndexPath‘时,我都会尝试删除该单元格的所有子视图,但这似乎并不能解决问题。

我应该在哪里向单元格的滚动视图添加子视图,以便在每次重用单元格时释放它们?

下面是我的一段代码:

代码语言:javascript
运行
AI代码解释
复制
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("newsFeedCell", forIndexPath: indexPath) as! NewsFeedCell
    cell.layoutIfNeeded()

    // Get the profile picture dimensions
    self.profPicWidthHeight = getProfilePictureDimensions(cell)

    // Reset all views in the friends subview
    for view in cell.friends.subviews {
        view.removeFromSuperview()
    }

    // Get all info to display in cell
    cell.eventTitle.text = self.eventNames[indexPath.section]
    cell.time.text = self.eventTimes[indexPath.section]
    cell.entityPicture.image = self.eventImages[indexPath.section]
    cell.entityName.text = self.eventSponserNames[indexPath.section]

    // If this user has joined this event, add his/her image to the array
    if (self.eventsUserJoined[indexPath.section]) {
        self.eventUserImages[indexPath.section].append(self.meImage)
    }

    // Set the scroll view content size
    cell.friends.contentSize = CGSizeMake(CGFloat(self.eventUserImages[indexPath.section].count + 2) * (self.profPicHorizontalOffset + self.profPicWidthHeight), cell.friends.frame.height)

    // Add profile images
    var i: CGFloat = 1
    for profPic in self.eventUserImages[indexPath.section] {
        cell.friends.addSubview(layoutProfilePicture(i, picture: profPic!, squareDimension: self.profPicWidthHeight))
        i++
    }

您能提供的任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2015-08-05 21:52:53

您需要使用图像缓存来克服速度慢的问题。您的单元格每次出现在屏幕上时都会被重新绘制。如果不对图像使用inMemory缓存,将会导致速度变慢。看一下SDWebImage,并使用它来设置图像。

https://github.com/rs/SDWebImage

示例用法:

让url = NSURL(string:"http://my-images-url.com")

self.imageView.sd_setImageWithURL(url,已完成:阻止)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31843277

复制
相关文章
iOS开发中UITableViewCell点击时子视图背景透明的解决方法
        在做iOS项目的开发中,UITableView控件的应用十分广泛。在进行自定义UITableViewCell时,经常有小伙伴遇到这样的问题:在UITableViewCell上面添加了一个有背景颜色的子视图,当用户点击UITableViewCell或者选中UITableViewCell时,Cell上的子视图发生了奇怪的变化,其背景色变透明了,如果添加在Cell上的子视图只是一个色块,那么我们看起来,这个子视图好像莫名其妙的消失了一样。如下图所示:
珲少
2018/08/15
1.4K0
iOS开发中UITableViewCell点击时子视图背景透明的解决方法
IOS 自定义UITableViewCell 常用
创建CustomizeUITableViewCell.swift import UIKit class CustomizeUITableViewCell:UITableViewCell { var thumbnail:UIImageView! var title:UILabel! var detail:UIButton! override init(style:UITableViewCellStyle,reuseIdentifier:String?) { super.init(style:sty
用户5760343
2019/07/08
6770
iOS14适配【解决UITableViewCell兼容问题(往cell添加子视图的方式不规范)】
今天升级最新IDE Xcode,准备适配iOS14 API,结果发现app首页的cell中按钮也无法点击了。
公众号iOS逆向
2021/01/18
2.6K0
iOS14适配【解决UITableViewCell兼容问题(往cell添加子视图的方式不规范)】
UITableViewCell中添加复制逻辑
@interface ICUserInfoCell(){ UIMenuItem * _copyMenuItem; } @end @implementation ICUserInfoCell - (id)initWithStyle:(UITableViewCellStyle)cell reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:cell reuseIdentifier:reuseIdent
程序员不务正业
2018/06/14
7760
禁止子视图响应父视图的点击事件
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/50970367
用户1451823
2018/09/13
1.8K0
【说站】js创建具有可变数量的数组
1、Array.of()方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。
很酷的站长
2022/11/24
3.1K0
【说站】js创建具有可变数量的数组
【swift学习笔记】三.使用xib自定义UITableViewCell
使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖放一个图片和一个文本框到tableviewc
lpxxn
2018/01/31
2K0
【swift学习笔记】三.使用xib自定义UITableViewCell
Python中的可变对象与不可变对象
+=操作符对应__iadd__魔法方法,对于不可变对象,a+=b和a=a+b等价,对于可变对象并不等价,dict和set不支持+=和+操作符。
雪飞鸿
2023/04/19
8060
解决UITableView中Cell重用机制导致内容出错的方法总结
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑。
freesan44
2018/09/05
2.5K0
Masonry的使用之利用子视图撑起父视图
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/80521257
用户1451823
2018/09/13
3.4K0
Masonry的使用之利用子视图撑起父视图
【iOS 开发】父视图外部子视图点击响应 - hitTest
面试被问过两次了的一个问题,记录一下:假如一个 UIView(我们称作 FatherView),有一个 subview(我们称作 ChildView),这个 ChildView 在 FatherView 的 frame 外部,那么默认情况下,这个 ChildView 被点击的时候,并不会触发 FatherView 的点击响应链(这是合情合理的,FatherView 所在的位置都没被点击,它不遍历 subviews,不作回应是正常的),这时候怎样才能让这个 ChildView 相应点击事件?
KyXu
2019/04/11
1.1K0
【iOS 开发】父视图外部子视图点击响应 - hitTest
自定义UITableViewCell实现左滑动多菜单功能LeftSwipe
1、使用自定义UITableViewCell + UISwipeGestureRecognizer + 代理 实现;
tandaxia
2018/09/27
2.5K0
自定义UITableViewCell实现左滑动多菜单功能LeftSwipe
Python中的可变对象和不可变对象
Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型。
py3study
2020/01/20
1.3K0
less中的可变参数
当前我们的混合的参数都需要传递,如果都需要全部传递可以使用 @arguments,@arguments 代表着就是你传入的所有参数,less 中的 @arguments 和 js 中的 arguments 一样,可以拿到传递进来的所有形参,这个时候你就不用足一的赋值,如下
程序员 NEO
2023/09/29
2170
less中的可变参数
《Motion Design for iOS》(十五)
通常情况下,iOS app中屏幕上的物体都是UIView对象。它们是矩形的并且有坐标和大小来定义它们在屏幕上的位置和尺寸。UIView是用来构建你的界面的UIKit Framework中基本的界面对象。每个视图都可能伴随着文本、形状或图片绘制。比如说,iOS app中的状态栏是一个长且瘦的视图,处于屏幕的顶端,并且状态栏目中的每个物体(时间、电池指示器、信号强度指示器等等)都是状态栏视图中的其它视图。
Cloudox
2021/11/23
8730
《Motion Design for iOS》(十五)
【IOS开发基础系列】Table View开发专题
    A table view is an instance of theUITableView class in one of two basic styles, plain or grouped. A plain table view is an unbroken list; a grouped table view has visually distinct sections. A table view has a data source and might have a delegate. The data source object provides the data for populating the sections and rows of the table view. The delegate object customizes its appearance and behavior.
江中散人_Jun
2023/10/16
4060
【IOS开发基础系列】Table View开发专题
UITableViewCell的重用机制原理
每当有一个cell从屏幕消失,就将其放到缓存池中,如果有新的cell出现,就去缓存池中取,如果缓存池中没有,再创建。
赵哥窟
2018/11/07
1.9K0
视图的alpha属性可能会影响子视图的透明度
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53037832
用户1451823
2018/09/13
9490
视图的alpha属性可能会影响子视图的透明度
iOS AutoLayout全解
AutoLayout简介 Autolayout是一种全新的布局技术,专门用来布局UI界面的,用来取代Frame布局在遇见屏幕尺寸多重多样的问题。Autolayout自iOS 6开始引入, 但是由于X
xiangzhihong
2018/02/06
4.6K0
iOS AutoLayout全解
Sass中的可变参数
SASS 中的可变参数和 LESS 中也一样,只不过由于 SASS 不是使用 JS 实现的,所以不能直接在混合中使用 arguments,必须通过 $args... 的格式来定义可变参数,然后通过 $args 来使用,注意点:和 LESS 一样可变参数必须写在形参列表的最后:
程序员 NEO
2023/09/29
2020
Sass中的可变参数

相似问题

UITableViewCell中对象的数量可变

12

访问自定义UITableViewCell中的子视图

23

自定义UITableViewCell更新子视图

26

自定义UITableViewCell移除子视图

11

自定义UITableViewCell子视图布局

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文