从 TableViewCell 中删除 imageView 子层

2024-02-19

当我有图像时,我使用 CAGradientLayer 插入子图层,

...
layer.name = @"Gradient";
[cell.imageView.layer insertSublayer:layer atIndex:0];

当 ImageView 没有图像时,我需要删除这个子层。 我尝试了不同的方法但没有成功。我最后一次尝试的是

for (CALayer *layer in cell.imageView.layer.sublayers) {
    if ([layer.name isEqualToString:@"Gradient"]) {
        [layer removeFromSuperlayer];
    }

}

但它给了我一个错误:

CoreData: error: Serious application error.  An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:.  *** Collection <CALayerArray: 0xc1502e0> was mutated while being enumerated. with userInfo (null)

抛出异常是因为您正在更改sublayers数组,同时使用 foreach 循环枚举它。这对于层来说并不是什么特殊的事情,当您在枚举任何 NSMutableArray 时添加/删除对象时,会引发类似的异常。

您有多种选择来解决此问题

解决方案一:一旦修改数组就停止枚举。

for (CALayer *layer in cell.imageView.layer.sublayers) {
    if ([layer.name isEqualToString:@"Gradient"]) {
        [layer removeFromSuperlayer];
        break;
    }
}

解决方案2:不要枚举真正的数组,而是使用它的副本。

NSArray* sublayers = [NSArray arrayWithArray:cell.imageView.layer.sublayers];
for (CALayer *layer in sublayers) {
    if ([layer.name isEqualToString:@"Gradient"]) {
        [layer removeFromSuperlayer];
    }
}

解决方案3:使用键值编码来保留对梯度层的引用。

插入后设置:

[cell.imageView.layer insertSublayer:layer atIndex:0];
[cell.imageView.layer setValue:layer forKey:@"GradientLayer"];

检索并删除它

CALayer* layer = [cell.imageView.layer valueForKey:@"GradientLayer"];
[layer removeFromSuperlayer];
[cell.imageView.layer setValue:nil forKey:@"GradientLayer"];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 TableViewCell 中删除 imageView 子层 的相关文章

随机推荐

  • 如何从嵌套的 CollectionView 单元格传递按钮操作?

    我有一个 MainCollectionView 用于在项目之间滚动 在这些单元格之一内我有另一个带有单元格的 collectionView 在该集合视图中 每个单元格都有一个按钮 我的问题是 当点击按钮时 如何将操作从按钮传递到 MainC
  • 尝试在 C# 中使用 ODBC 调用 Oracle 包时出现语法错误

    我正在尝试使用 ODBC 和 C 使用 Oracle 9i 包 我尝试使用中描述的语法here http support microsoft com kb 310130 here https stackoverflow com questi
  • 为什么seaborn图不显示置信区间/误差线?

    我在用sns lineplot在图中显示置信区间 sns lineplot x threshold y mrl array err style band ci 95 plt show 我得到以下图 它不显示置信区间 有什么问题 As of
  • 使用 UPX 压缩 Windows 可执行文件有什么缺点吗?

    我用过UPX http upx sourceforge net 之前曾减少过我的 Windows 可执行文件的大小 但我必须承认 我对这可能产生的任何负面影响很天真 所有这些打包 拆包的缺点是什么 是否存在任何人建议不要对可执行文件进行 U
  • Service Worker js 中的 Fetch() 无法发送请求标头?

    我的代码相同 我正在调用 fetch 但网络和服务器中的请求没有像 cookie 这样的请求标头 我又找到了一篇关于这个的帖子Service Worker 未发送请求标头 https stackoverflow com questions
  • 何时应终止 Excel VBA 变量或将其设置为 Nothing?

    过去两年我一直在自学 Excel VBA 我认为有时在代码段末尾处理变量是合适的 例如 我已经看到它在这个位中完成 改编自Ron de Bruin 将 Excel 转换为 HTML 的代码 http www rondebruin nl ma
  • TypeORM jsonb 数组列

    我正在开发一个节点微服务 orm和b分别是typeorm and postgresql 我正在尝试创建jsonb数组列 但我可能没有以正确的方式进行操作 Notes 我通常会通过简单地添加一个简单的额外实体和关系来完成此任务 在这种情况下
  • Phonegap + jQuery Ajax Post 不起作用

    我正在尝试将数据作为 POST 数据从我正在使用 jQuery 开发的 PhoneGap 应用程序发送到本地页面 ajax method POST url http api return php data name John locatio
  • Twig 更改元数据

    我需要获取树枝中页面的元数据 以便用我的值替换它们 但我不知道如何获取它们 现在我有 if spec name matches meta set getdatas app request server get REQUEST URI use
  • php - 在 处爆炸字符串。但忽略小数,例如 2.9

    目前我正在爆炸一个字符串 它按我喜欢的方式工作 唯一的问题是 当 以小数点形式出现 有没有办法排除decimal来自爆炸函数的点 我当前的设置 正如你所看到的 它正在爆炸 两个数字之间 String This is a string It
  • Powershell - 从 csv 文件获取行并输出到不同 csv 文件的更快方法

    我有一个包含大约 250 000 行的 csv 文件 此 csv 文件中的第一个标题是 营销活动参考代码 我还有一个需要在第一列中查找的活动参考代码列表 即 COLMABQ140 COLMABQ141 如果我在第一列中找到此活动参考代码 我
  • C# 如何在 GridView 上创建超链接 OnClick 事件?

    我在创建我想要的 GridView 时遇到问题 我希望用户进入网站并查看附加到数据库的 GridView 列是 ID InsertionTime Filepath ProccessedByUser现在我希望用户单击他 她想要处理的文件路径
  • 无法使用自动配置脚本在代理后面下载嵌入式 MongoDB

    我有一个使用 Maven 构建的 Spring Boot 项目 我打算在其中使用嵌入式 mongo db 我在 Windows 7 上使用 Eclipse 正如我在 Internet 选项 的 连接 选项卡中观察到的那样 我位于使用自动配置
  • 在 JavaScript 中,如何检测迭代器返回键值条目?

    考虑以下函数 当传递一个可迭代的东西时 该函数尝试实现通用行为 let f function thing if typeof thing Symbol iterator function for let key value of thing
  • 使用.Net Core创建UDP套接字

    如何创建一个 UDP 套接字以非阻塞方式接收本地端点中的数据 我不知道数据来自的远程端口 我在 Linux 中使用 NET Core 我认为我可以使用 ReceiveAsync 但它似乎无法以这种方式工作 我这样解决了这个问题 static
  • 应用程序配置不允许给定 URL

    我正在尝试根据以下内容创建 Facebook 登录页面this https developers facebook com docs facebook login getting started web 教程 我只改变了两行 appId 3
  • Openpyxl:如何在检查单元格是否包含特定值后复制行

    我有一个工作表 每周都会更新数千行 并且需要在过滤后从该工作表传输行 我正在使用当前代码查找具有所需值的单元格 然后将整行传输到另一张工作表 但保存文件后 出现 IndexError 列表索引超出范围 异常 我使用的代码如下 import
  • 如何在对话框片段上运行单元测试?

    我正在尝试为 DialogFragment 创建一个独立的单元测试 以便 DialogFragment 可以单独进行测试 我正在使用 FragmentScenario 启动 DialogFragment 现在我正在尝试确认是否显示对话框消息
  • 打包时Maven NumberFormatException

    在项目上运行 mvn package 或 mvn install deploy 时 我在 Windows PC 上遇到非常奇怪的错误 此错误仅发生在本机上 在我的笔记本电脑和其他计算机上一切正常 我曾经能够毫无问题地打包 安装项目 但现在甚
  • 从 TableViewCell 中删除 imageView 子层

    当我有图像时 我使用 CAGradientLayer 插入子图层 layer name Gradient cell imageView layer insertSublayer layer atIndex 0 当 ImageView 没有图