我想在由HexFiend框架驱动的TextView中实现颜色我差一点就成功了,但是颜色表现得不太好有什么建议吗?

问题描述

我正在尝试在HexFiend框架驱动的TextView中实现多色文本。我已经成功地将纯黑色设置为背景,但是现在我想要实现多色文本。我已经研究了很多HexFiend源代码,并想出了以下代码: 我将HFStringEncodingTextRepresenter子类化,并且确实覆盖了一种方法:styleForAttributes:ranges:

#import "HFRepresenterStringEncodingTextView.h"
#import <Cocoa/Cocoa.h>
#import <HexFiend/HexFiend.h>
#import "HFTextVisualStyleRun.h"

NS_ASSUME_NONNULL_BEGIN

@interface SpecialTextRepresenter : HFStringEncodingTextRepresenter

@end

NS_ASSUME_NONNULL_END

#import "SpecialTextRepresenter.h"

@implementation SpecialTextRepresenter


- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {
    HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
     
    [run setRange:NSMakeRange(0,[self.controller.byteArray length])];
    [run setForegroundColor:[HFColor orangeColor]];
    [run setBackgroundColor:[HFColor blackColor]];

    NSMutableIndexSet *bookmarkExtents = nil;

    if (! bookmarkExtents) bookmarkExtents = [[NSMutableIndexSet alloc] init];
     
    [bookmarkExtents addIndexesInRange:NSMakeRange(0,[self.controller.byteArray length])];
     
     if (bookmarkExtents) {
         [run setBookmarkExtents:bookmarkExtents];
     }

    return run;
}

@end

我很高兴找到解决方案,但不幸的是,它看起来并不好:

enter image description here

到目前为止,我无法确定为什么行之间有那些彩色虚线。任何帮助是极大的赞赏。谢谢

解决方法

我发现了引起彩色线条的问题。它与HexFiend的一项功能(称为“书签”)有关。在这种情况下是不需要的,因为我们只对文本颜色感兴趣。因此,我的问题中列出的代码可以简化:

- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {

    HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
         
    [run setRange:NSMakeRange(0,[self.controller.byteArray length])];
    [run setForegroundColor:[HFColor orangeColor]];
    [run setBackgroundColor:[HFColor blackColor]];

    return run;
}

结果看起来不错,就像我期望的那样:

enter image description here

设置一种颜色非常简单,可以覆盖上述方法,但是另一件事是实现基于范围的精确多色。我正在尝试通过使用HFRepresenterTextView的此属性来实现这一点:

@property (nullable,nonatomic,copy) NSArray *styles;

这是一个数组,其中包含HFTextVisualStyleRun类型的对象,与我们在上述重写方法中处理的对象相同。这很棘手,因为设置数组时,如果其中一个索引未分配属性,则框架会引发异常。一旦获得干净的解决方案,我将立即完成此答案。谢谢

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...