Sto usando iOS 6, quindi le stringhe attribuite dovrebbero essere facili da usare, giusto? Beh ... non così tanto.iOS NSAttributedString su UIButton
Quello che voglio fare:
Usando una sottoclasse personalizzata di UIButton
(che non fa nulla personalizzato per titleLabel
), mi piacerebbe avere un multi-line, titolo attribuito cioè:
- Tutti i tappi (mi rendo conto che non è parte degli attributi) sulla prima riga
- Bolded sulla prima riga
- Sottolineato sulla prima linea
- peso "normale" sulla seconda riga
- non sottolineato sulla seconda riga
- Centrato su entrambe le linee
sono stato in grado di ottenere # s '1 fino a 5 (almeno, pensavo di averlo fatto, ma gli attuali test stanno dando errori con il testo su più righe), ma quando ho provato a fare qualcosa (qualsiasi cosa!) per centrare il testo, la mia app continua a bloccarsi. Quando cerco di ottenere tutti i 6 elementi di lavoro (attraverso vari metodi), ottengo il seguente incidente/errore:
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.'
In base a quello che ho provato, sembra che io possa avere una delle seguenti opzioni, ma non entrambi:
- un multi-linea, etichetta centrata
- un attribuito etichetta
posso vivere con uno o l'altro se must, ma non posso credere che non possa avere quello che sembra essere un concetto abbastanza semplice.
Qualcuno può dirmi per favore cosa ho sbagliato?
Ecco l'ultima iterazione del codice che sto cercando:
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];
E riguardo lo styling di un UILabel e l'aggiunta al pulsante? – JeffRegan
Non si suppone che 'titleLabel' sia un' UILabel'? Immagino di poterlo fare, ma sento ancora che è un martello più grande di quanto DOVREBBE essere necessario. – mbm29414
È iOS, non ha senso ... I kid. Ho rovinato un po 'di tempo con NSMutableAttributedString e non era altro che mal di testa. Il mio consiglio sarebbe quello di mantenere le cose il più semplice e semplice possibile. – JeffRegan