引人注目的文字

时间:2010-04-01 07:14:43

标签: iphone

我需要查看多行标签的文字。有办法吗? 任何建议都会有很大帮助。谢谢,

3 个答案:

答案 0 :(得分:3)

如果你想用UILabel for iPhone做你不能:(

所以有三种方式:

  1. (最简单)使用UIWebView:

    // set html header with styles, you can certainly use some other attributes       
    NSString * htmlWrap =  @"<html><head><style>body{text-align:left; background-color:transparent; color:black; font-weight:bold; text-decoration:line-through; font-size:%dpt}`</style></head>`<body>%@</body`></html>";
    NSStrring * myText = @"My sample strikethrough text";
    webView.backgroundColor =  [UIColor clearColor];
    [webView setOpaque:NO];
    NSString * htmlText = [NSString stringWithFormat:htmlWrap, 12, myText];
    [webView loadHTMLString:htmlText baseURL:nil];
    
  2. 使用unicode结合变音符号(这适用于任何对象标签,文本字段等)。

    “长笔画叠加”(U + 0336)或
    在“之前结合低线”(U + 0332) 你的字符串中的每个字符。使用

     -(void)getCharacters:(unichar *)buffer range:(NSRange)aRange
    

    从字符串创建unichar数组(分配字符串长度的双倍大小),然后重新排列数组并在每个字符前添加U + 0336或U + 0332,然后使用

    将unichar数组转换回NSString
     -(id)initWithCharacters:(const unichar *)characters length:(NSUInteger)length
    

    但在大多数情况下这看起来很糟糕

  3. 在上下文中手工绘制。

答案 1 :(得分:2)

这适用于单行标签。

@interface UILabelStrikeThrough : UILabel {
}
@end

@implementation UILabelStrikeThrough
- (void)drawRect:(CGRect)rect {
    CGContextRef c = UIGraphicsGetCurrentContext();

    CGFloat black[4] = {0.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetStrokeColor(c, black);
    CGContextSetLineWidth(c, 2);
    CGContextBeginPath(c);
    CGFloat halfWayUp = (self.bounds.size.height - self.bounds.origin.y) / 2.0;
    CGContextMoveToPoint(c, self.bounds.origin.x, halfWayUp );
    CGContextAddLineToPoint(c, self.bounds.origin.x + self.bounds.size.width, halfWayUp);
    CGContextStrokePath(c);

    [super drawRect:rect];
}

@end

答案 2 :(得分:2)

改进了@RefuX代码以处理删除线的位置和宽度。 我很快就会添加多行支持。

现在支持多行

Gist for UILabelStrikethrough