目标C中的Strike-through字体

时间:2010-03-22 01:23:29

标签: iphone objective-c uitableview fonts

如何在目标C中使用删除字体?更具体地说,在UITableViewCell

cell.textLabel.text = name;
cell.detailTextLabel.text = quantity ;
cell.XXX = ??

10 个答案:

答案 0 :(得分:50)

这是Marin,“iOS6 by Tutorials”中属性字符串章节的作者。

由于iOS6实际上支持一堆不同的文本属性,包括删除线。

以下是一个简短示例,您可以将其用于单元格文本标签:

NSDictionary* attributes = @{
  NSStrikethroughStyleAttributeName: [NSNumber numberWithInt:NSUnderlineStyleSingle]
};

NSAttributedString* attrText = [[NSAttributedString alloc] initWithString:@"My Text" attributes:attributes];
cell.textLabel.attributedText = attrText;

这就是全部。祝你好运!

答案 1 :(得分:9)

编辑:从iOS 6开始,此答案已过期。请参阅下面的最新答案

对于删除线或下划线字体没有原生支持。您必须自己在标签的视图上绘制线条。

这很愚蠢,因为IB的字体检查器具有设置删除线和下划线的选项,但如果您尝试设置它们,则会立即忽略这些选项。

答案 2 :(得分:5)

1 - 获取需要删除的文本大小

CGSize expectedLabelSize = [string sizeWithFont:cell.titleLabel.font constrainedToSize:cell.titleLabel.frame.size lineBreakMode:UILineBreakModeClip];

2 - 创建一行并将其添加到文本

UIView *viewUnderline = [[UIView alloc] init];
viewUnderline.frame = CGRectMake(20, 12, expectedLabelSize.width, 1);
viewUnderline.backgroundColor = [UIColor grayColor];
[cell addSubview:viewUnderline];
[viewUnderline release]; 

答案 3 :(得分:4)

CGRect frame = sender.titleLabel.frame;
UILabel *strikethrough = [[UILabel alloc] initWithFrame:frame];
strikethrough.opaque = YES;
strikethrough.backgroundColor = [UIColor clearColor];
strikethrough.text = @"------------------------------------------------";
strikethrough.lineBreakMode = UILineBreakModeClip;
[sender addSubview:strikethrough];

答案 4 :(得分:4)

这是你如何删除你的标签。但请记住,它只适用于ios 6.0之后

NSNumber *strikeSize = [NSNumber numberWithInt:2]; 

NSDictionary *strikeThroughAttribute = [NSDictionary dictionaryWithObject:strikeSize 
forKey:NSStrikethroughStyleAttributeName];

NSAttributedString* strikeThroughText = [[NSAttributedString alloc] initWithString:@"Striking through it" attributes:strikeThroughAttribute];

strikeThroughLabel.attributedText = strikeThroughText;

答案 5 :(得分:2)

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:@"Your String here"];
[attributeString addAttribute:NSStrikethroughStyleAttributeName
                    value:@2
                    range:NSMakeRange(0, [attributeString length])];
yourLabel.attributedText = attributeString;

答案 6 :(得分:1)

您是否考虑过找到自己的删除线并自行加载?这并不难,只需将UIFont添加到Info.plist文件中并将字体名称放在那里。然后,您可以手动将文本设置为新的删除线字体。

请参阅有关加载自定义字体的帖子。

Can I embed a custom font...

答案 7 :(得分:1)

使用UILabel的NSStrikeThroughAttributesattributedText可以实现删除线。这是Swift中的解决方案

    let strikeThroughAttributes = [NSStrikethroughStyleAttributeName : 1]
    let strikeThroughString = NSAttributedString(string: "Text of Label", attributes: strikeThroughAttributes)
    strikeThroughLabel.attributedText = strikeThroughString

答案 8 :(得分:0)

UIView *strikeView = [[UIView alloc] initWithFrame:ccr(0, 0, myLabel.bounds.size.width, 1)];
strikeView.backgroundColor = [UIColor redColor];
strikeView.center = ccp(myLabel.bounds.size.width/2, myLabel.bounds.size.height/2);
[myLabel addSubview:strikeView];

答案 9 :(得分:-2)

这将攻击整个细胞。如果您需要它看起来像完成的任务:

CGSize size = cell.contentView.frame.size; // you'll draw the line in whole cell.

UIView *line = [[UIView alloc] initWithFrame:CGRectMake(15,size.height / 2,size.width - 30, 1)];
line.backgroundColor = [UIColor grayColor]; // set your preferred color
[cell addSubview:line];

您可以在CGRectMake中指示其他值而不是15 - 它偏移X.在这种情况下,您最好将宽度减少一倍(在我的情况下,它是15 * 2 = 30),以使它看起来不错。