Я использую iOS 6, поэтому атрибутные строки должны быть просты в использовании, не так ли? Ну ... не так много.iOS NSAttributedString на UIButton
Что я хочу сделать:
Используя пользовательский подкласс UIButton
(он ничего не делает обычай titleLabel
), я хотел бы иметь многострочный, приписываемое название, которое:
- Все крышки (я понимаю, что это не часть атрибутов) на первой линии
- Bolded на первой линии
- Подчеркнуто на первой линии
- «Нормальный» вес на второй линии
- Non-подчеркнуты на второй линии
- Centered на обеих линиях
Я был в состоянии получить # 's 1 через 5 до сих пор (по крайней мере, я думал, что сделал, но текущее тестирование приводит к ошибкам с многострочным текстом), но когда я пытался что-то сделать (что угодно!), чтобы текст был центрирован, мое приложение продолжает сбой. Когда я пытаюсь получить все 6 пунктов, работающих (с помощью различных методов), я получаю следующее сообщение об ошибке/аварии:
Terminating app due to uncaught exception
'NSInternalInconsistencyException', reason:
'NSAttributedString invalid for autoresizing,
it must have a single spanning paragraph style
(or none) with a non-wrapping lineBreakMode.'
Основываясь на том, что я пытался, кажется, что у меня может быть один из следующих вариантов, но не оба:
- многострочный, по центру этикетки
- приписывали этикетки
Я могу жить с той или другой, если я обязательно, но я не могу поверить, что у меня не может быть того, что кажется довольно простой концепцией.
Может кто-нибудь, пожалуйста, скажите мне, что у меня получилось?
Вот последняя итерация кода я пытаюсь:
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setAlignment:NSTextAlignmentCenter];
[style setLineBreakMode:NSLineBreakByWordWrapping];
UIFont *font1 = [UIFont fontWithName:@"HelveticaNeue-Medium" size:20.0f];
UIFont *font2 = [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0f];
NSDictionary *dict1 = @{NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle),
NSFontAttributeName:font1};
NSDictionary *dict2 = @{NSUnderlineStyleAttributeName:@(NSUnderlineStyleNone),
NSFontAttributeName:font2};
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] init];
[attString appendAttributedString:[[NSAttributedString alloc] initWithString:@"LINE 1\n" attributes:dict1]];
[attString appendAttributedString:[[NSAttributedString alloc] initWithString:@"line 2" attributes:dict2]];
[[self buttonToStyle] setAttributedTitle:attString forState:UIControlStateNormal];
[[[self buttonToStyle] titleLabel] setNumberOfLines:0];
[[[self buttonToStyle] titleLabel] setLineBreakMode:NSLineBreakByWordWrapping];
Как насчет стиля UILabel и добавления его к кнопке? – JeffRegan
Разве 'titleLabel' не должен быть' UILabel'? Думаю, я мог бы это сделать, но я все еще чувствую, что это больший молот, чем ДОЛЖЕН быть необходимым. – mbm29414
Это iOS, ничего не имеет смысла ... Я парень. Я перепутал с NSMutableAttributedString некоторое время назад, и это было не что иное, как головные боли. Мой совет заключался в том, чтобы держать все как можно проще и проще. – JeffRegan