Ios 替换删除线文本的UILabel中的出现字符串

Ios 替换删除线文本的UILabel中的出现字符串,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我想在初始化UILabel后,在其中划掉部分文本 我试过这个: NSMutableAttributedString *uppercaseStrikeText = [[NSMutableAttributedString alloc] initWithString:@"one uppercase character"]; [uppercaseStrikeText addAttribute:NSStrikethroughStyleAttributeName

我想在初始化
UILabel
后,在其中划掉部分文本

我试过这个:

 NSMutableAttributedString *uppercaseStrikeText = [[NSMutableAttributedString alloc] initWithString:@"one uppercase character"];
[uppercaseStrikeText addAttribute:NSStrikethroughStyleAttributeName
                        value:@2
                        range:NSMakeRange(0, [uppercaseStrikeText length])];

self.passwordLabel.text = [self.passwordLabel.text
                           stringByReplacingOccurrencesOfString:@"one uppercase character"
                           withString:@"one uppercase character" options:NSStrikethroughStyleAttributeName range:NSMakeRange(0, [uppercaseStrikeText length])];
然而,这给了我们一个警告:

Incompatible pointer to integer conversion sending 'NSString *const __strong' to parameter of type 'NSStringCompareOptions' (aka 'enum NSStringCompareOptions')

然而,这并没有使我的代码崩溃,它也不起作用。我缺少什么?

您需要使用UILabel.attributedText属性并构造正确的NSAttributedString

NSString *originalText = self.label.text;
NSRange strikeRange = [originalText rangeOfString:@"string to be striked"];
if (strikeRange.location != NSNotFound) {
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:originalText attributes:attributesOfNormalText];
    [attributedString setAttributes:attributesOfStrikeText range:substringRange];
    self.label.attributedText = attributedString;
}

嗯,这给了我同样的警告。。我意识到我提供的代码无法100%测试,因为我忘记添加
UpperCaseStrickeText
@bdv
nsStrikethrowStyleAttributeName
不是
stringByReplacingOccurrencesOfString:
的有效选项,它是NSAttributedString的一个属性。您应该构造和属性化字符串,并将其放入label.attributeText属性中,这是唯一的方法。根据您的示例:
[UpperCaseStrickeText-addAttribute:NSStrikethrowStyleAttributeName值:@2范围:NSMakeRange(0[UpperCaseStrickeText-length]);self.passwordLabel.attributeText=大写删除文本好的,但这将替换整个标签,我只想替换其中的一部分。假设标签上写着“输入大小写字符”。然后我想划掉“大写”part@bdv使用
rangeOfString:
就像我在回答中所做的那样,获取需要更改的子字符串的范围。如果可能有几种情况,请使用
rangeOfsString:options:range:
将它们全部枚举