NSAttributedString 颜色测试

2023-12-24

比较或测试 NSAttributed 字符串的特定颜色属性的正确方法是什么?

举个例子,我想知道文本选择是否有红色文本。我尝试了几种方法,如下所示,但没有一种方法能够产生匹配结果。我看到屏幕上的文本变成红色,并且记录属性返回: UIDeviceRGBColorSpace 1 0 0 1

- (BOOL)isRedWithAttributes:(NSDictionary *)attributes
{
    BOOL isRedWithAttributes = NO;
    if (attributes != nil)
    {
// if ( [attributes objectForKey:NSForegroundColorAttributeName] == [UIColor redColor] )    
// if ( [attributes objectForKey:NSForegroundColorAttributeName] == @"UIDeviceRGBColorSpace 1 0 0 1" )

       if ( [attributes objectForKey:NSForegroundColorAttributeName] == [UIColor colorWithRed:1 green:0 blue:0 alpha:1] )
       {
            isRedWithAttributes = YES;
        }
        else
        {
            isRedWithAttributes = NO;
        }
    }
    return isRedWithAttributes;
}

以下是我传递测试属性的方法:

NSAttributedString *selectedString = [attributedString attributedSubstringFromRange:selectedRange];
        [selectedString enumerateAttributesInRange:NSMakeRange(0, [selectedString length]) 
options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
                              usingBlock:^(NSDictionary *attributes, NSRange range, BOOL *stop)
        {
            UIFont *fontFace = [attributes objectForKey:NSFontAttributeName];       
            BOOL isRedWithAttributes = [fontFace isRedWithAttributes:attributes];
            if (isRedWithAttributes)
            {
                NSLog(@"detected red. set selected");
                [self.redButton setSelected:YES];
            }
            else
            {
                NSLog(@"detected not red. do not set selected");
                [self.redButton setSelected:NO];
            }
}

我认为这并不重要,但为了完整起见,以下是我将文本设置为红色的方法。

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:self.synopsisTextView.attributedText];
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:selectedRange];
self.synopsisTextView.attributedText = attributedString;

Objective-C 是 C 的严格超集。 Objective-C 对象存在于堆中并通过指针进行跟踪。其最终效果是测试:

[attributes objectForKey:NSForegroundColorAttributeName] == 
[UIColor colorWithRed:1 green:0 blue:0 alpha:1]

测试身份而不是平等。也就是说,不是测试两个对象是否具有相同的值,而是测试它们是否是同一物理对象,位于内存中的同一地址。 C 不允许运算符重载,因此==运算符在 Objective-C 中的含义与在 C 中完全相同。您正在比较两个指针。它们碰巧指向 Objective-C 对象这一点不存在。

您可能想要:

[[attributes objectForKey:NSForegroundColorAttributeName] isEqual:
    [UIColor colorWithRed:1 green:0 blue:0 alpha:1]]

这将允许UIColor反对应用它认为能够建立平等的任何测试。

唯一潜在的警告是UIColor仅当颜色相对于相同颜色空间定义且具有相同系数时,才认为颜色相等。假设您总是在 RGBA 中定义所有颜色,那应该不会有什么区别。

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

NSAttributedString 颜色测试 的相关文章

随机推荐

  • 设计before_filterauthenticate_admin?

    我通过添加管理员属性向 Devise 添加了管理员角色 您能告诉我这是否是创建需要管理员用户签名的 before filter 的正确方法 在任何控制器中 before filter authenticate admin 在应用程序控制器中
  • Apache/httpd /var/www/html/ .cgi 脚本抛出 500 内部服务器错误

    我今天安装了一台新的 CentOS 7 x86 64 LAMP 服务器 我用 c 语言编译了一个简单的 CGI 脚本 并将其命名为 test cgi 并为 cgi 脚本启用了 AddHandler 然而 每次我尝试从 var www htm
  • MySQL、Rails ActiveRecord 日期分组和时区

    我想按创建日期对用户进行计数 当我查询最后一个用户时 我有 gt User last created at gt Thu 07 Aug 2014 21 37 55 BRT 03 00 当我计算每个日期的用户数时 我得到 gt User gr
  • htaccess 仅将主域重写到子文件夹

    我正在使用 cPanel 帐户托管多个站点 为了获得干净的 public html 我使用 htaccess 将主域重定向到子文件夹之一 所以当用户输入www example com 它将被重写为www example com mainsi
  • Express + Angular 路由导致无限循环 + 崩溃

    我正在使用 Express 和 Angular 开发 Node 应用程序 我使用 Angular 进行路由 并且我的路由设置如下 app config routeProvider function routeProvider routePr
  • 如何查找 Wix Burn 可执行文件的 GUID 以便以编程方式卸载?

    我创建了 wix 引导程序项目 安装时会创建注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Uninstall SOME GUID 所以我可以使用 ARP
  • 使用 C# 以编程方式锁定 Windows 工作站

    我遇到了这个锁定 Windows 工作站的示例 using System Runtime InteropServices DllImport user32 dll SetLastError true static extern bool L
  • TCP 序列号

    我试图了解 TCP 标头的序列号是如何生成的 在某些地方我读到它是 数据包中第一个字节的索引 链接在这里 https stackoverflow com questions 2672734 tcp sequence number quest
  • 使用sqlalchemy解析python3中的hstore

    我有一个 csv 文件 其中一列以 hstore 格式编写 我想将它转换为 python 字典 但同时保持我的代码干燥 我的代码库使用 sqlalchemy 它有一个 parse hstore函数定义在https github com sq
  • 根据先前的值添加到列表

    我正在尝试将这个列表组合在一起 输入示例 M1 a 14 a 7 a 16 b 3 b 15 c 22 c 1 c 5 Output a 14 7 16 b 3 15 c 22 1 5 含义将所有 a 值组合在一起 同样适用于 b c 等
  • 为什么 math.acos 会导致 ValueError: math 域错误?

    我正在使用 math acos 函数 math acos 1 0000000000000002 这会引发数学域错误 有人能说出原因吗 我之前计算过这个值 这里这个值给出了错误 但如果我最后删除 2 它不会抛出错误 我不明白这是为什么 See
  • 使用 Maven 构建多架构 SWT 应用程序

    我已经为 SWT 应用程序设置了一个 Maven 项目 该应用程序在多个平台上运行 OS X Windows 64 位 Windows 32 位 Linux 64 位和 Linux 32 位 我已对其进行设置 以便在运行 Maven 时检测
  • 在 django 中为模型创造完整历史的最佳方式是什么?

    如何为模型创造历史 向我显示某个字段中的旧值和新变化的值 在我看来 我认为为具有相同字段的每个模型创建历史模型 并且当用户从第一个模型创建新数据或更新数据时 也转到第二个模型 我搜索了很多这个问题 发现了一个名为 django revers
  • 错误 AndroidManifest.xml 不存在或根标记不正确

    我是使用 Android Studio 进行 Android 应用程序开发的新手 在尝试运行我的应用程序时遇到了此错误 错误 AndroidManifest xml 不存在或根标记不正确 我发现我的 AndroidManifest xml
  • Composer:您的系统中缺少请求的 PHP 扩展 ext-intl *

    我正在尝试使用composer json文件 但是 当我尝试运行命令 composer install in my path project 我收到错误 我已经配置了我的wamp for extension php intl dll 并复制
  • log4net / EventLogAppender 忽略我的 LogName

    此配置应该使我的日志条目最终出现在自定义日志中 对吧 但它最终会出现在应用程序日志中 我的应用程序以管理员身份运行 运行我的应用程序后 我可以确认日志和事件源是通过使用创建的EventLog Exists MyLog and EventLo
  • 谷歌浏览器扩展中的文件“compulated_hashes.json”的用途是什么?

    在一些谷歌浏览器扩展中 有一个computed hashes json文件 我没有找到任何有关该文件的文档 因此 如果我能得到一些解释 那就太好了 以下是该文件的摘录 file hashes block hashes THf ne1nArt
  • 通常禁用矩阵降维?

    众所周知 如果列维或行维为 1 R 会尝试将矩阵简化为向量 可以通过使用drop F命令 然而 我目前正在编写一个大型 R 包 并且需要在代码中数百次禁用维度下降 因此我必须手动找到这些位置并添加drop F数百次 因此 我想知道是否有任何
  • Symfony2 表单未选中的复选框未考虑在内,为什么?

    当我发送带有未经检查的复选框 如果相关实体属性等于true 那么它不会改变为false 反之亦然 当发送带有选中复选框的表单时将属性设置为 true 效果很好 并且保存的所有表单其他字段也可以正常工作 以下是我构建表单并声明相关属性的方法
  • NSAttributedString 颜色测试

    比较或测试 NSAttributed 字符串的特定颜色属性的正确方法是什么 举个例子 我想知道文本选择是否有红色文本 我尝试了几种方法 如下所示 但没有一种方法能够产生匹配结果 我看到屏幕上的文本变成红色 并且记录属性返回 UIDevice