gpt4 book ai didi

ios - JSQMessagesViewController 自定义链接

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:22 25 4
gpt4 key购买 nike

我正在使用 swift framework我需要能够在消息文本字符串中包含一个# like 标记。如果用户发送的消息包含以 # 为前缀的代码,例如:#t3Us9K,那么单个“单词”需要是所有用户都可以点击的链接。请告诉我这是否可行,如果可行,该怎么做。

最佳答案

我一直在研究你的问题,这是我的结果,

首先,您需要修改库中的 JSQMessagesCellTextView 并添加一个方法来帮助您检测自定义链接,例如 #test,如果您愿意,可以克隆我的分支并添加此功能并这是它的样子,动画问题是因为我的 gif 转换器

enter image description here

已编辑

https://github.com/rmelian2014/JSQMessagesViewController/tree/contributing

- (void)detectCustomLinks
{
NSMutableArray<NSTextCheckingResult*> *textCheckingResults = [NSMutableArray<NSTextCheckingResult*> array];
for (NSRegularExpression *exp in [self.regularExpressionsDelegate getRegularExpressions]) {
NSArray<NSTextCheckingResult*> * matches = [exp matchesInString:self.text options:NSMatchingWithoutAnchoringBounds range:NSMakeRange(0, self.text.length)];
[textCheckingResults addObjectsFromArray:matches];
}

NSMutableAttributedString * str2 = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];

[str2 removeAttribute:NSLinkAttributeName range:NSMakeRange(0, str2.string.length)];
for (NSTextCheckingResult * match in textCheckingResults) {
[str2 addAttribute: NSLinkAttributeName value:[str2 attributedSubstringFromRange:match.range].string range:match.range];
}

self.attributedText = str2;
}

我添加了一个委托(delegate)来提供正则表达式来检查

@protocol RegularExpressionDelegate <NSObject>

-(NSArray<NSRegularExpression*>*)getRegularExpressions;

@end

/**
* `JSQMessagesCellTextView` is a subclass of `UITextView` that is used to display text
* in a `JSQMessagesCollectionViewCell`.
*/
@interface JSQMessagesCellTextView : UITextView

@property (weak) id<RegularExpressionDelegate> regularExpressionsDelegate;

@end

然后您需要将您的 viewController 设置为 UITextViewDelegate,最后在您的 cellForRowAtIndexPath 中您需要设置类似这样的内容

cell.textView.regularExpressionsDelegate = self;
cell.textView.delegate = self;

这会将您的 viewController 设置为 regularExpressionsDelegate,然后您需要实现此方法,返回您希望检测为海关链接的正则表达式

- (NSArray<NSRegularExpression*>*)getRegularExpressions
{
return [NSArray arrayWithObject:[NSRegularExpression regularExpressionWithPattern:@"#([a-zA-Z0-9])+" options:0 error:NULL]];
}

你还需要实现这个

//UITextViewDelegateMethod
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
//URL param will provide the link that was touched ej:#test
return YES;
}

我希望这对你有帮助,问候

关于ios - JSQMessagesViewController 自定义链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com