2014-01-24 5 views
2

Как заменить эллипсис усечения («...») на UILabel в iOS 7 с другим с атрибутом? Например, с цветным «>».Заменить эллипсис усечения UILabel в iOS 7

Я надеялся, что текстовый набор NSLayoutManager сделает это возможным, но, похоже, UILabel не делает его общедоступным, если он его использует.

Кроме того, могу ли я смело предположить, что эллипсис используется как символ усечения в каждой локализации? Возможно, разные языки имеют разные символы усечения.

+0

Проект TTTAttributedLabel с открытым исходным кодом (подкласс UILabel) имеет встроенную функциональность. –

+0

Nice! Я этого не знал. @mattt все думает! – hpique

+0

Возможный дубликат [Как изменить усеченные символы в UILabel?] (Http://stackoverflow.com/questions/4793420/how-to-change-truncate-characters-in-uilabel) – Bhavin

ответ

0

Я не думаю, что это дает вам доступ к этому. Я думаю, вы бы справились с этим вручную. Например, используйте TextKit для определения размера вашей строки, если она не подходит в доступной области, обрезайте ее самостоятельно и добавьте «>», а затем поместите новую строку в метку.

NSAttributedString имеет методы для получения размера строки.

Сообщите мне, если вам нужна дополнительная информация об этом ..?

+0

Спасибо. У меня есть намек на то, как сделать это вручную, но более подробная информация всегда ценится. Специально, если вы используете Text Kit, так как большинство других примеров кода не обновляются в латентных iOS 7 API. – hpique

+0

Честно говоря, я попытаюсь выбить пример сегодня для вас ... Вы против использования CoreText? –

+0

Не спешите. Я бы предпочел Text Kit, если те же функции доступны на более высоком уровне абстракции. – hpique

0

Я думаю, вы можете сделать некоторые настройки в -replaceElipsesForLabel метод предоставлен Fonix, чтобы получить желаемый результат.

+0

Спасибо. Я не видел этого вопроса. Kinda делает это дубликат, но я хотел сосредоточиться на iOS 7. Не стесняйтесь голосовать, если вы считаете, что не стоит иметь этих двух. Что касается вашего предлагаемого решения, я надеялся избежать тиражирования логики усечения, так как есть много разных случаев, чтобы рассмотреть (и что ответ Fonix не делает.) – hpique

-1

Я написал метод, чтобы сделать это, и работает в iOS7

-(void)setCustomEllipsis:(NSString*)customEllipsis inLabel:(UILabel*)label with:(NSString*)string{ 

//Replace the ellipsis 
NSMutableString* result = [[NSMutableString alloc] initWithString:@""]; 
NSArray* strings = [string componentsSeparatedByString:@" "]; 
for (NSString* s in strings) { 
    CGRect newSize = [[NSString stringWithFormat:@"%@%@%@",result,s,customEllipsis] boundingRectWithSize:CGSizeMake(label.frame.size.width,0) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:label.font} context:nil]; 
    if (newSize.size.height < label.frame.size.height) { 
     [result appendString:s]; 
     [result appendString:@" "]; 
    }else{ 
     [result appendString:customEllipsis]; 
     break; 
    } 
} 
[label setText:result]; 

//Set different font to the ellipsis 
const CGFloat fontSize = 13; 
UIFont *boldFont = [UIFont boldSystemFontOfSize:fontSize]; 
UIFont *regularFont = [UIFont systemFontOfSize:fontSize]; 
UIColor *foregroundColor = [UIColor lightGrayColor]; 

NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:regularFont, NSFontAttributeName,foregroundColor, NSForegroundColorAttributeName, nil]; 
NSDictionary *subAttrs = [NSDictionary dictionaryWithObjectsAndKeys:boldFont, NSFontAttributeName, nil]; 
const NSRange range = [label.text rangeOfString:customEllipsis]; 

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:result 
              attributes:attrs]; 
[attributedText setAttributes:subAttrs range:range]; 


[label setAttributedText:attributedText]; 
} 
2

Я рекомендую вам использовать TTTAttributedLabel, просто установить свойство «attributedTruncationToken» для пользовательской строки.

+0

Я не знал, что TTTAttributedLabel имел эту функцию - отличное решение – Fraser

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