Używam iOS 6, więc przypisane ciągi powinny być łatwe w użyciu, prawda? Cóż ... nie tak bardzo.NSAttributedString iOS na UIButtonie
Co chcę zrobić:
Korzystanie niestandardową podklasę UIButton
(nie robi nic zwyczaj titleLabel
), chciałbym mieć kilka linii, nadany tytuł, który brzmi:
- Wszystkie czapki (zdaję sobie sprawę, że nie jest część atrybutów) na pierwszej linii
- pogrubione na pierwszej linii
- podkreślone na pierwszej linii
- „Normal” ciężar na drugiej linii
- dla podkreślone w drugim wierszu
- skoncentrowane na obu liniach
byłem w stanie uzyskać # 's 1 do 5 do tej pory (przynajmniej myślałem, że tak, ale obecne testy przynoszą błędy z tekstem wielowierszowym), ale kiedy próbowałem coś zrobić (cokolwiek!), aby uzyskać wycentrowanie tekstu, moja aplikacja się zawiesza. Kiedy próbuję uzyskać wszystkie elementy robocze 6 (różnymi metodami), pojawia się następujący błąd:/awarii
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.'
W oparciu o to, co próbowałem, wydaje się, że mogę mieć jedną z następujących opcji, ale nie oba:
- a multi-linia, skupione etykieta
- nadana etykieta
mogę żyć z jednej lub drugiej strony, gdybym koniecznością, ale nie mogę uwierzyć, że nie mogę mieć tego, co wydaje się dość prostolinijną koncepcją.
Czy ktoś może mi powiedzieć, co mam nie tak?
Oto ostatnia iteracja kodu próbuję:
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];
Co powiesz na stylizację UILabel i dodanie jej do przycisku? – JeffRegan
Czy "titleLabel' nie ma być" UILabel "? Sądzę, że mógłbym to zrobić, ale nadal uważam, że to większy młotek niż POWINNY być konieczny. – mbm29414
To iOS, nic nie ma sensu ... Dzieciaku. Pomyślałem z NSMutableAttributedString jakiś czas temu i to było tylko bóle głowy. Moją radą byłoby, aby wszystko było tak proste i łatwe, jak to tylko możliwe. – JeffRegan