重用 UITableView 中的单元格

2023-12-01

我有我的自定义单元“NewsCell”。它包含我的自定义视图“ImageMosaicView”(它只是 UIView 的子类)。我用它来显示照片,就像 Facebook 上发布的照片​​一样。我只是将图像的 url 传递给 ImageMosaicView 的实例,它会加载并显示它。

我有一个问题。当我快速滚动 tableView 时,上一个单元格中的图像会在新单元格中出现一段时间,同时加载新图像。但我不知道它们是如何出现在那里的,因为我提供了默认图像。这是一个例子

我怎样才能避免这种情况?

// ImageMosaicView.swift

class ImageMosaicView: UIView {
    @IBOutlet var imageViews: [UIImageView]!

    var urlStrings: [String] = [] {
    didSet {
        for imageView in imageViews {
            if let url = URL(string: urlStrings[i]) {
                imageView.loadImage(url: url)
            }
        }
    }

    // MARK: - Initialization

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        let _ = loadViewFromNib()
    }

    // MARK: - Methods

    func loadViewFromNib() -> UIView {
        let bundle = Bundle.init(for: type(of: self))
        let nib = UINib(nibName: "ImageMosaicView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        view.frame = bounds
        view.autoresizingMask = [
            UIViewAutoresizing.flexibleWidth,
            UIViewAutoresizing.flexibleHeight
        ]
        addSubview(view)
        return view
    }
}

// How I provide urls for images:

// NewsViewController.swift. 'tableView(cellForRow:, indexPath:)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let news = newsCollection[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "NewsCell", for: indexPath) as! NewsCell
        //...
        cell.imageMosaicView.urlStrings = news.imageUrlsCollection
        //...
        return cell
    } else {
        return UITableViewCell()
    }
}

执行此操作的正确方法是配置prepareForReuse()里面的方法NewsCell class.

override func prepareForReuse() {
    super.prepareForReuse()

    imageView.image = //Default image
    //Whatever other things you need cleared.
}

每当 tableView 将单元​​格出列时,就会调用此方法。因此,任何缓存的数据都应在此处清除,否则它将保留在出队单元中,除非您在将其返回到队列中之前手动更改它cellForRowAt method.

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

重用 UITableView 中的单元格 的相关文章

  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • 在 Swift 中有条件导入基于 iOS 版本的框架(如 Speech)?

    有没有办法有条件地导入框架Swift基于运行时 iOS 版本 特别是 我有一个部署目标为的应用程序iOS 8 我想使用新的Apple Speech应用程序中的框架 如果在运行时可用 我知道 available iOS 10 代码部分的指令
  • iOS - UIBarButtonItem - 后退按钮标题垂直位置不调整

    我正在设置自定义字体UIBarButtonItem对象使用UIAppearance 这工作正常并正确设置字体 但是 我确实需要调整按钮标题的垂直位置以适应新字体的大小 UIBarButtonItem appearance setTitleT
  • 如何在气隙 Mac 上安装新的 Apple 全球开发者关系中级证书?

    您可能知道也可能不知道 现在使用新的中间证书生成新的签名证书 你可以在这里读到它 https developer apple com support wwdr intermediate certificate https developer
  • WKWebView 截图

    我正在尝试捕获网络视图向用户显示的图像 以便我可以对网页进行一些颜色分析 当我尝试从其父级获取图像时 即使页面已呈现 我基本上也会得到一个白框 func makeImageSnapshot gt NSImage let imgSize se
  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • 如何在 Alamofire 中使用“responseDecodable”方法?

    I have been trying to use responseDecodable method from Alamofire but I m getting Generic parameter T could not be infer
  • 每次打开应用程序时,FileManager 的路径 URL 都不同[重复]

    这个问题在这里已经有答案了 我想在fileManager根路径中创建一个文件夹 但在创建之前 我想检查该文件夹是否存在 如果不存在 我将创建 否则将保留它 这是我使用的功能 public func isDirectoryExist path
  • 使用 HTTP NSURL 创建 AVAsset

    我正在尝试合并两个NSURLs包含视频参考 其中一个 URL 指向 AWS 上的视频 另一个 URL 指向本地存储的视频 我的导出代码有效 因为我已经尝试使用两个本地视频 但每当我尝试合并 HTTP url 和本地 url 时 我都会收到此
  • 如何在禁用状态下更改 UIButton 图像 alpha?

    我有一个带有图像的 UIButton 在其禁用状态下 该图像应具有 0 3 alpha UIButton button UIButton buttonWithType UIButtonTypeCustom UIImage arrowImag
  • 如何在 Swift 中使用函数数组

    我已经阅读了我可以在这里找到的所有关于函数数组的帖子 太棒了 你能做到 我估计 但没有一篇文章实际上展示了如何使用它们 至少不是我想要做的 这就是我想要的 它们都可以采用相同的参数 但这不是必需的 这篇文章很接近 将允许我循环执行每个函数
  • iOS 中第一响应者的正式定义是什么?

    据我所知 第一响应者对象是根据输入活动等接收回调信号 并且它将沿着链向上冒泡 直到找到愿意处理它的响应者 但更正式地说 第一响应者的范围是什么 例如 它是应用程序范围的响应程序吗 似乎作为第一响应者只是说这个特定的对象将收到交互通知 其他响
  • 从应用程序打开/关闭 iPhone 的 Wifi

    我需要打开或关闭 iPhone 中的 wifi 有什么方法可以做到吗 还是被禁止了 私有框架 所有使用公共 SDK 编写的应用程序都经过沙箱处理 他们只能访问苹果认为可以在该沙箱中使用的属性和数据 恐怕 Wi fi 不在列表中 请看一下这个
  • 如何在复杂的层次结构中上下同步 CALayer 和 UIView 动画

    See 如何在整个层次结构中管理 CALayer 动画 https stackoverflow com questions 26917908 how to manage calayer animations throughout a hie
  • 当键盘出现时调整 UITextView 的大小

    我想在键盘出现时调整文本视图的大小 我的代码如下 我打开了自动布局 因此使用来自超级视图的 textView gt bottom 空间的约束 并通过 IBOutlet distanceFromBottom 引用它 void keyboard
  • iOS 版 Google 地图 sdk 中折线的轮廓

    我的要求是在地图上显示一条绿色折线 但当地图切换到卫星视图时 绿色折线变得不清楚 我无法改变折线的颜色 因此 为了将折线与背景 地图的卫星视图 区分开来 我需要为折线绘制白色轮廓 我浏览了 GMSPolyline 类的文档 但找不到任何可以
  • Objective-C 中 NSURL 为 null 而 NSString 是正确的

    我有一个NSString包含一个 url 以及当我分配时NSURL与NSString NSURL 输出 空 这是因为url中有一些非法字符 导致NSURL不编码就无法读取NSString包含网址 NSString u incomingUrl
  • SwiftUI 自动调整底部工作表的大小

    SwiftUI 有很多底部工作表的示例 但是它们都指定了使用 GeometryReader 工作表可以增长到的某种类型的最大高度 我想要的是创建一个底部工作表 其高度仅与其中的内容一样高 我使用首选项键提出了下面的解决方案 但必须有更好的解
  • 出现错误:FT_Open_Face 失败:错误 2

    当我使用时出现以下错误CGContextDrawPDFPage context PDFPage 对于某些文件 有解决办法来解决这个问题吗 FT Open Face failed error 2 错误2看起来像errno2 这是 找不到文件
  • ios swift 如何将默认语言设置为阿拉伯语?

    我正在开发一个有两种语言的应用程序 即英语和阿拉伯语 我用英语编写了该应用程序 然后用阿拉伯语本地化了该应用程序 更改语言时需要重新启动应用程序 我唯一的问题是 第一次安装应用程序时如何将默认语言设置为阿拉伯语 我尝试在编辑方案部分将语言设

随机推荐

  • Beautiful Soup 并通过 ID 提取 div 及其内容

    soup find tagName id articlebody 为什么这不返回 div div 标签和中间的东西 它什么也不返回 我知道它确实存在 因为我正盯着它 soup prettify soup find div id articl
  • Java围绕参数值同步方法

    考虑以下方法 public void upsert int customerId int somethingElse some code which is prone to race conditions 我想保护此方法免受竞争条件的影响
  • 开玩笑测试不使用 dotenv 读取环境变量

    我正在对一个调用环境变量的函数运行测试 但未定义 我尝试过但不起作用的解决方案 1 add require dotenv config path env 在我的测试文件中 2 在 package json 中传递全局变量 jest glob
  • spring boot - @PostConstruct 未在 @Component 上调用

    我是 spring 新手 我使用以下命令创建了一个新的 spring boot 项目https start spring io 没有进一步的依赖项 解压缩 zip 文件并在 IntelliJ IDEA 中打开该项目 我没有进行任何进一步的配
  • 撤消 git pull --rebase?

    我刚刚跑了 git pull rebase 并且忘记指定 来源 它看起来像是从所有不同的分支中提取的 有没有办法从这里恢复我的存储库以撤消拉动 Thanks After a git pull手术 ORIG HEAD应该指向之前的值HEAD
  • 从 JSONArray 获取 JSONObject [重复]

    这个问题在这里已经有答案了 我对从服务器获得的 JSONObject 进行了一些修复 jsonObj new JSONObject resultString JSONObject sync reponse jsonObj getJSONOb
  • 在 iOS 设备上访问以编程方式创建的日历

    我已经弄清楚如何在 iPhone 应用程序中添加自定义日历 但我不知道如何将该日历添加到设备的日历中 从应用程序内查看时 该事件会显示正确的日历 但即使我点击事件的日历行 我的日历也不在列表中 如果我想保持日历名称正确 我必须取消 有没有办
  • 我们是否应该始终在 Swift 中的闭包内使用 [unowned self]

    WWDC 2014 第 403 场中级斯威夫特 and 成绩单 有下面的幻灯片 发言者说 在这种情况下 如果我们不使用 unowned self 在那里 将会出现内存泄漏 这是否意味着我们应该始终使用 unowned self 内部封闭 O
  • 确定变量是否在 Python 中定义[重复]

    这个问题在这里已经有答案了 如何知道运行时代码中的特定位置是否已设置变量 这并不总是显而易见的 因为 1 可以有条件地设置变量 并且 2 可以有条件地删除变量 我正在寻找类似的东西defined 在 Perl 或isset 在 PHP 中或
  • 自定义元素未拾取 onclick

    我正在定义一个自定义元素 customElements define my button class extends HTMLButtonElement onclick console log bar extends button http
  • Unix Sockets 的缓冲特性

    有谁知道 Unix 套接字在发送小块数据 几个字节 时的缓冲特性 当我使用 TCP 套接字时 我可以禁用 Nagle 算法以防止数据传输中的延迟 但 Unix 域套接字没有 据我所知 等效的功能 unix 域套接字上没有可用的 nagle
  • 如何实现固定步长循环?

    我试图在我的程序中创建一个固定的步骤循环 但由于某种原因我似乎无法让它正常工作 基本上我需要的是一个循环 while over Update elapsedtime Draw elapsedtime 或类似的东西 带有 我尝试过使用 Thr
  • 控制对未来内容的访问

    这主要是关于未来的公共内容 但不仅如此 在标准 Plone 站点中 如果您创建的顶级内容未显示在导航上 仍然是私有的 那么您将其公开 通过工作流程 并显示在导航上 但稍后您会在将来计时它再次从导航中消失 不过 此时 如果匿名 登录用户知道
  • 如何制作单个可执行文件 VS 2010

    我正在使用 C 和 DirectX 制作游戏 如果能够通过提供单个可执行文件而不是运行安装向导来与其他人分享我的小组进度 那就太好了 我已经检查了我的发布和调试文件夹 但这些可执行文件不起作用 发布的 exe 大小约为 21KB 这似乎不正
  • devtools/GitHub 下载错误

    截至今天我无法使用devtools从 GitHub 安装包 不知道错误是否在于 Me 开发工具 GitHub 我在用着install github如下并得到以下错误 library devtools install github repor
  • 如何使用 WebDav 将 dav:href 与 Outolook Interop href 值匹配

    我以前曾使用 webdav 根据主题和时间访问 Exchange 2003 服务器上发送的消息 这很有效 我现在需要实现另一个功能 这意味着将消息从客户端 Outlook 不是 Web 访问 拖到 Windows 窗体上 然后在 Excha
  • 使用广播接收器更改日期时无法运行服务

    我创建了一个生日提醒应用程序 我想在晚上 12 00 开始服务来扫描数据库中人员的生日 我添加了一个广播接收器
  • iPad/iPhone 悬停问题导致用户双击链接

    我有一些我以前建立的网站 使用 jquery 鼠标事件 我刚买了一个 ipad 我注意到所有鼠标悬停事件都被转换为单击 所以例如我必须执行两次单击而不是一次单击 第一次悬停 而不是实际点击 有解决方法可以解决这个问题吗 也许我应该使用 jq
  • 为什么 OS X 上的 FF 在单击事件处理程序中丢失了 jQuery-UI?

    在使用 jQUery 1 7 1 和 jQUery UI 1 8 18 的网页中 如果我在文档准备好时在警报框中输出 ui 我会得到 object Object 但是 当使用 Firefox 时 如果我在单击事件处理程序中输出 ui 则会得
  • 重用 UITableView 中的单元格

    我有我的自定义单元 NewsCell 它包含我的自定义视图 ImageMosaicView 它只是 UIView 的子类 我用它来显示照片 就像 Facebook 上发布的照片 一样 我只是将图像的 url 传递给 ImageMosaicV