gpt4 book ai didi

ios - 如何删除整个 NSAttributedString block

转载 作者:行者123 更新时间:2023-12-01 15:56:07 26 4
gpt4 key购买 nike

我正在开发一款应用,让用户可以通过输入@用户名 来提及其他用户。虽然我有 found a way要检测 @ 字符并在文本字符串中突出显示所选用户名,我不确定如何在用户提及用户但随后想从提及中删除该用户时管理该事件。

例如,在 Facebook 应用程序中,当您提及某人时,UITextView 中该人的姓名会以浅蓝色背景突出显示。但是,当您开始删除该提及时,当您删除属性字符串中的最后一个字符时,整个提及都会被删除。

因此,我正在寻找一种方法,当用户删除属性字符串的最后一个字符以便删除整个属性字符串并从 TextView 中完全删除提及时,我可以捕获这种方法。

最佳答案

为了实现上述期望的行为,我最终执行了以下操作。我将所有这些方法实现为放置 UITextView 的 View Controller 的一部分,因此我将 UITextViewDelegate 协议(protocol)添加到我的 View Controller 。然后,我实现了以下方法:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
//if this is true, then the user just deleted a character by using backspace
if(range.length == 1 && text.length == 0){
NSUInteger cursorPosition = range.location; //gets cursor current position in the text
NSRange attrRange; //will store the range of the text that holds specific attributes
NSDictionary *attrs = [_content.attributedText attributesAtIndex:cursorPosition effectiveRange:&attrRange];

//check if the attributes of the attributed text in the cursor's current position correspond to what you want to delete as a block
if([attrs objectForKey:NSBackgroundColorAttributeName]){
NSAttributedString *newStr = [_content.attributedText attributedSubstringFromRange:NSMakeRange(0, attrRange.location)]; //creates a new NSAttributed string without the block of text you wanted to delete
_content.attributedText = newStr; //substitute the attributed text of your UITextView
return NO;
}
}
return YES;
}

关于ios - 如何删除整个 NSAttributedString block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30360502/

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