如何解决我想在由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
我很高兴找到解决方案,但不幸的是,它看起来并不好:
到目前为止,我无法确定为什么行之间有那些彩色虚线。任何帮助是极大的赞赏。谢谢
解决方法
我发现了引起彩色线条的问题。它与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;
}
结果看起来不错,就像我期望的那样:
设置一种颜色非常简单,可以覆盖上述方法,但是另一件事是实现基于范围的精确多色。我正在尝试通过使用HFRepresenterTextView的此属性来实现这一点:
@property (nullable,nonatomic,copy) NSArray *styles;
这是一个数组,其中包含HFTextVisualStyleRun类型的对象,与我们在上述重写方法中处理的对象相同。这很棘手,因为设置数组时,如果其中一个索引未分配属性,则框架会引发异常。一旦获得干净的解决方案,我将立即完成此答案。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。