2013-05-06 7 views
11

Voglio solo evidenziare solo il testo in UILabel, ho provato dando backgroundColor per etichetta, ma sta evidenziando gli spazi vuoti anche non sembra buono. Quindi c'è un modo per evidenziare il testo senza ridimensionare UILabel.Come evidenziare solo il testo in UILabel - IOS

Si prega di controllare l'immagine, ecco le etichette sono più grandi rispetto al testo (allineato al centro)

enter image description here

Grazie.

+0

si dovrà utilizzare un 'NSAttributedString'. –

+0

@MikeWeller Puoi fornire maggiori dettagli ... – Newbee

+0

Penso che tu voglia che lo sfondo sia chiaro. set label.backgroundColor = [UIColor clearColor]; Label.highlightedTextColor = [UIColor greenColor]; – Ashini

risposta

22

La maggior parte delle altre soluzioni non ritengo di testo che si estende su più linee pur evidenziando solo il testo, e sono tutti abbastanza intricati che coinvolgono subviews aggiuntivi.

Un iOS 6 e versioni successive soluzione è quella di utilizzare stringhe attribuite:

NSMutableAttributedString *s = 
    [[NSMutableAttributedString alloc] initWithString:yourString]; 

[s addAttribute:NSBackgroundColorAttributeName 
      value:[UIColor greenColor] 
      range:NSMakeRange(0, s.length)]; 

label.attributedText = s; 
+0

Non ho ancora idea di NSMutableAttributedString, comunque funziona correttamente. Grazie. – Newbee

+3

Ho provato il processo di cui sopra. Non ha funzionato bene con me.: | http://i.imgur.com/XhuVL9q.png?1 –

+0

Questo non funziona come previsto dalla domanda: aggiunge anche il colore di sfondo agli spazi vuoti creati dal word wrapping. Verifica: [Evidenzia solo il testo in una UILabel] (http://stackoverflow.com/questions/31293873/highlight-just-the-text-in-a-uilabel?rq=1) – Damasio

1

provare questo

MTLabel

MTLabel *label4 = [MTLabel labelWithFrame:CGRectMake(20, 270, 250, 60) 
            andText:@"This label is highlighted, has a custom line height, and adjusts font size to fit inside the label."]; 
     [label4 setLineHeight:22]; 
     [label4 setFont:[UIFont fontWithName:@"Helvetica" size:30]]; 
     [label4 setAdjustSizeToFit:YES]; 
     [label4 setMinimumFontSize:15]; 
     [label4 setFontHighlightColor:[[UIColor orangeColor] colorWithAlphaComponent:0.5]]; 
     [self.view addSubview:label4]; 
-3

si può avere un UIImageView, impostare il colore della vostra scelta di fondo poi inserire il vostro UILabel su di esso. Questo sicuramente risolverà il tuo problema. Ecco il codice Soluzione:

UIImageView * imgView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 100, 40)]; 
[imgView setBackgroundColor:[UIColor brownColor]]; 
[self.view addSubview:imgView]; 


UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 40)]; 
[label setBackgroundColor:[UIColor clearColor]]; 
[label setTextAlignment:UITextAlignmentCenter]; 
label.text = @"My Label"; 
[imgView addSubview:label]; 


[label release]; 
[imgView release]; 

È possibile anche ottenere lo stesso utilizzando Interface Builder.

+0

Anche l'immagine di sfondo coprirà l'intero UIlabel ... – Newbee

+0

Si prega di verificare la mia risposta modificata –

+0

Si prega di citare il motivo per il voto negativo !! Quindi posso correggere la mia risposta. –

3

Questo aggiungerà una visualizzazione secondaria dietro il testo, con la dimensione corretta:

CGSize size= [[label text] sizeWithFont:[UIFont systemFontOfSize:18.0]]; 
NSLog(@"%.1f | %.1f", size.width, size.height); 
NSLog(@"%.1f | %.1f", label.frame.size.width, label.frame.size.height); 

UIView *highlightView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)]; 
[highlightView setBackgroundColor:[UIColor greenColor]]; 
[self.view insertSubview:highlightView belowSubview:label]; 
[highlightView setCenter:label.center]; 

E non dimenticate: [label setBackgroundColor:[UIColor clearColor]];

+3

Questo non funzionerà correttamente se il testo si sta spostando su più righe. Questa vista verde può formare solo rettangoli singoli. Se la seconda riga ha solo 1 parola, l'intera riga verrà evidenziata. –

+0

Esatto, ma se devi supportare qualsiasi iOS <6 e non puoi usare 'NSMutableAttributedString', allora questa potrebbe essere la soluzione più semplice. – xapslock