2012-01-16 8 views
6

Desidero impostare lo stile del carattere di testo UILable nel formato di maiuscoletto come nell'immagine sottostante.Cambia stile carattere - (Imposta testo Lable in formato All-Caps) nell'obiettivo C

Vi prego di dare la soluzione per questo se qualcuno sa,

enter image description here

Grazie. :)

+0

voglio stile del carattere come didascalia "Data Completato", "Time Taken" e "Score", che sono qui a sinistra. – Raj

+0

aggiungi file font per questo nel tuo xcode – Leena

+0

Il font è Helvetica Neue Bold e posso ottenere font perfettamente, ma il problema è che non riesco a ottenere lo stesso stile - significa che problema non è possibile impostare lo stile del testo come maiuscole :( – Raj

risposta

11

Se non ti ho sbagliato, è questo quello che vuoi?

NSString *uppercaseString = [yourString uppercaseString]; 
+0

Quindi cercare i siti dei font per questo. Se hai intenzione di inviare questo al negozio Apple, devi anche includere la licenza del font, non dimenticarlo. – aslisabanci

+0

Non è un font diverso. È halvtica-bold ma è solo uno stile è cambiato in Photo-shop come formato All-Caps, voglio solo sapere che è possibile cambiare questo tipo di stile di carattere nell'obiettivo-C :) :) – Raj

+0

Beh, per quanto ne so, non è possibile farlo in codice . Faresti meglio a provare alcuni soluzioni alternative come indicato in alcune delle risposte qui sotto. – aslisabanci

0

provare con questo

NSString *string = @"askdfjgjksdfgh"; 
NSString *upString = [string uppercaseString]; 
NSLog(@"U %@", upString); 
+0

già citato – Sarah

+0

è uno stile di carattere che è necessario impostare il nome del font in base al testo. – Hiren

1

si può provare con questo

NSString * str = @ "Mudit"; label.text = [str uppercaseString];

che vi darà l'output come questo: Mudit

4

font disponibili in iOS non hanno "stile capitalic". È necessario aggiungere il proprio carattere o provare a creare il carattere utilizzando la funzione CTFontDescriptorCreateCopyWithFeature.
Penso che il modo più semplice sarà quello di creare una stringa attribuita (NSAttributedString) con dimensioni di caratteri misti.

+0

In realtà, ciò non è corretto, almeno per iOS 6. I tipi di carattere inclusi con iOS sono le stesse varianti di OS X e molti di essi includono molte funzionalità di OpenType, come le maiuscole. –

+0

@Leo, potresti mostrare un esempio di utilizzo di maiuscoletto? – Lucien

+0

Sicuro. Apri la pagina seguente in Safari su iOS: http://www.w3schools.com/cssref/playit.asp?filename=playcss_font-variant&preval=small-caps iOS è in grado di eseguire le stesse funzioni tipografiche del fratello maggiore OS X; è tuttavia molto più difficile utilizzare queste funzionalità con l'API pubblica. –

0

Non è possibile modificare la dimensione o il tipo di carattere di una singola lettera all'interno di uno UILabel.

Quello che vuoi fare è avere 2 etichette, una in fase di accattonaggio per la prima lettera più grande e una dopo quella per la parola rimanente.

Per accedere la prima lettera ed il resto della parola si può usare:

NSString * word = @"COMPLETED"; 
NSString * firstLetter = [word substringToIndex:1]; 
NSString * remainingWord = [word substringFromIndex:1]; 

Quello che vedete nella foto sono probabilmente le immagini di parole e non UILabel s.

1

per rendere l'UILabel rendere come una stringa maiuscolo, in cui la prima lettera di ogni parola è più grande, si può fare qualcosa di simile:

@implementation CapitalicTextLabel 

- (void)drawRect:(CGRect)rect 
{ 

    // Drawing code 
    NSArray* words = [self.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetCharacterSpacing(context, 1); 
    CGContextSetFillColorWithColor(context, [self.textColor CGColor]); 
    CGAffineTransform myTextTransform = CGAffineTransformScale(CGAffineTransformIdentity, 1.f, -1.f); 
    CGContextSetTextMatrix (context, myTextTransform); 

    CGFloat x = 0; 
    float centeredY = (self.font.pointSize + (self.frame.size.height - self.font.pointSize)/2) - 2; 
    CGFloat firstLetterSize = self.font.pointSize * 1.4; 

    for (NSString* word in words) 
    { 
     NSString* letter = [[word substringToIndex:1] uppercaseString]; 
     CGContextSelectFont(context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], firstLetterSize, kCGEncodingMacRoman); 
     CGContextShowTextAtPoint(context, x, centeredY, [letter cStringUsingEncoding:NSASCIIStringEncoding], [letter length]); 
     x = CGContextGetTextPosition(context).x; 

     NSString* restOfWord = [[[word substringFromIndex:1] uppercaseString] stringByAppendingString:@" "]; 
     CGContextSelectFont(context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], self.font.pointSize, 
      kCGEncodingMacRoman); 
     CGContextShowTextAtPoint(context, x, centeredY, [restOfWord cStringUsingEncoding:NSASCIIStringEncoding], [restOfWord length]); 
     CGPoint v = CGContextGetTextPosition(context); 
     x = CGContextGetTextPosition(context).x; 
    } 

} 

@end 

Questa implementazione non gestisce la divisione tra multipla linee o onorare l'impostazione TextAlignment, Questo sarebbe dovrebbe essere abbastanza semplice da aggiungere in seguito.

Esempio:

enter image description here

Problemi correlati