2010-04-01 4 views
2

Мне нужно пробить текст многострочной метки. Есть ли способ сделать это? Любое предложение было бы очень полезно. Спасибо,ударить по тексту

+0

Вы имеете в виду UILabel? – kennytm

ответ

3

, если вы хотите сделать это с UILabel для iPhone вы не можете :(

так есть 3 способа:

  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) до
    каждый charecter в вашей строке. Используйте

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

    создать unichar массив из строки (выделить двойной размер длины строки), а затем переставить массив и добавить U + 0336 или U + 0332 до каждого символа, а затем преобразовать unichar массив обратно в NSString с

    -(id)initWithCharacters:(const unichar *)characters length:(NSUInteger)length 
    

    , но в большинстве случаев это выглядит плохо

  3. Draw это вручную от контекста.

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 
+0

, но is drawrect называется, когда мы setText, я попробовал его с помощью setText, но не работал. – sole007

2

Улучшенный код @RefuX для обработки местоположения и ширины зачеркивания. Я добавлю многострочную поддержку в ближайшее время.

Несколько строк теперь поддерживается

Gist for UILabelStrikethrough

+0

Apple не поддерживает изменение в любом пользовательском интерфейсе ... Его работа прекрасна, но Apple отвергает приложение, если мы используем этот код ... – Raj

+0

Почему Apple отвергает? Я выпустил приложение с этим кодом. –

Смежные вопросы