2

我正在做一个处理当天任务的项目,比如记笔记。
所以我分配日常任务去做,当任务完成时,我希望在任务名称中划出一行。
我正在寻找具有此删除线但失败的适当字体系列。
所以请为此建议我一个 .ttf 字体名称,以便我可以在我的项目中使用该字体来满足我的要求。

4

5 回答 5

5

******选项1******

.

如果您想在多行模式下删除文本:使用TTTAttributedLabel

创建新的 TTTAttributedLabel.h 和 TTTAttributedLabel.m 文件(不是来自 GITHUB,因为我使用单/双删除线功能进行了调整)

http://www.2shared.com/file/Z_qZpWVd/TTTAttributedLabel.html

http://www.2shared.com/file/xXjmC-1M/TTTAttributedLabel.html

以及需要删除线标签的地方 - 使用TTTAttributedLabel而不是UILabel

设置删除线=

TTTAttributedLabel *labelName = [[TTTAttributedLabel alloc] init];

labelName.linkAttributes = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] 
                forKey:@"TTTCustomStrikeOut"];   

设置双通=

TTTAttributedLabel *labelName = [[TTTAttributedLabel alloc] init];

labelName.linkAttributes = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] 
                forKey:@"TTTCustomDoubleStrikeOut"];

添加标签文本应该被删除的范围+提供可点击的链接(nil,无链接):

//set link to nil, to NOT-have a link on taping on this label.
[labelName addLinkToURL:nil withRange:NSMakeRange(0, [labelName.text length])];

PS - 正确重新定位双删除线 - 请在第 483、484 和 489、490 行编辑 TTTAtributedLabel.m 文件(目前我从中心更改了上行 y-2 和下 y+2。调整它以获得更好的结果。)

.

******选项2******

.

将所有字符串符号转换为特殊的删除线字符。

你可以从这个主页获得它们:http: //adamvarga.com/strike/

然后您可以 - 例如,将必要的符号翻译放在语言文件中:

“A”=“A̶”;“B”=“B̶”;"C" = "C̶"; “D”=“D̶”;“E” = “E̶”;“F”=“F̶”;“G” = “G̶”;"H" = "H̶"; ……

并使用此函数将普通文本字符串转换为删除字符串:

- (NSString *)returnStrikedOutTextFromString:(NSString *)mString
{
    NSString * mNewString = @"";

    for(int i = 0; i<[mString length]; i++)
    {
        mNewString = [NSString stringWithFormat:@"%@%@",mNewString, 
        NSLocalizedString([[mString substringToIndex:i+1] substringFromIndex:i],nil)];
    }

    return mNewString;
}

例如:

textLabel.text = [self returnStrikedOutTextFromString:@"string text"];

****选项 3****

我还建议尝试这里提到的 UILabel 子类:Underline text in UIlabel

希望有帮助!

于 2012-05-11T12:39:34.250 回答
2

使用下面的代码来划线:

NSString *string = Yourlabel.text;
CGSize stringSize = [string sizeWithFont:Yourlabel.font];
CGRect buttonFrame = Yourlabel.frame;
CGRect labelFrame = CGRectMake(buttonFrame.origin.x , 
buttonFrame.origin.y + stringSize.height/2, 
                                           stringSize.width, 2);
UILabel *lineLabel = [[UILabel alloc] initWithFrame:labelFrame];
lineLabel.backgroundColor = [UIColor blackColor];
[CellView addSubview:lineLabel];
于 2012-05-11T12:00:30.740 回答
2

如果你使用另一个简单的想法,它的工作很好,也很容易......

只需在标签上方添加另一个标签,标签代码是

UILabel *canceledlable = [[UILabel alloc] initWithFrame:yourmainlableframe];
canceledlable.opaque = YES;
canceledlable.backgroundColor = [UIColor clearColor];
canceledlable.text = @"------------------------------------------------";
canceledlable.lineBreakMode = UILineBreakModeClip;
[self.view addSubview: canceledlable];

在这里哪个标签想要你删除线字体只是把它的框架给这里,当你的任务完成时添加这个标签希望,这对你有帮助...... :)

于 2012-05-11T12:11:14.787 回答
1

用 TTTAttributedLabel 试试这个添加。

@implementation TTTAttributedLabel (Additions)

- (void)setStrikeThroughOn:(BOOL)isStrikeThrough {
    NSString* text = self.text;
    [self setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^        NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
    NSRange strikeRange = [[mutableAttributedString string] rangeOfString:text options:NSCaseInsensitiveSearch];
    [mutableAttributedString addAttribute:kTTTStrikeOutAttributeName value:[NSNumber numberWithBool:isStrikeThrough] range:strikeRange];
    return mutableAttributedString;
}];

// must trigger redraw
[self setNeedsDisplay];
}

@end
于 2013-05-22T01:40:38.077 回答
0

在斯威夫特,

let label = UITextView(frame: CGRectMake(0, 0, 300, 100))
let strikeThroughAttributes = [NSStrikethroughStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]
let labelString = NSAttributedString(string: "Hello, playground", attributes: strikeThroughAttributes)
label.attributedText = labelString
于 2014-12-29T19:50:41.230 回答