如何在目标C中使用删除字体?更具体地说,在UITableViewCell
中cell.textLabel.text = name;
cell.detailTextLabel.text = quantity ;
cell.XXX = ??
答案 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文件中并将字体名称放在那里。然后,您可以手动将文本设置为新的删除线字体。
请参阅有关加载自定义字体的帖子。
答案 7 :(得分:1)
使用UILabel的NSStrikeThroughAttributes
和attributedText
可以实现删除线。这是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),以使它看起来不错。