2012-01-26 23 views
42

Estoy desarrollando una aplicación para iPhone. En una etiqueta, quiero mostrar la primera letra del nombre mayúscula de un usuario. ¿Cómo puedo hacer eso?¿Cómo hacer la primera letra en mayúscula en un UILabel?

+0

¿Dónde quieres mostrarlo? En un cuadro de texto o una etiqueta o ...? –

+5

¿Ha comprobado la documentación de NSString para algún método que parece que devuelve una cadena en mayúscula? – UIAdam

+0

Si está haciendo esto con un apellido, tenga en cuenta que las reglas de mayúsculas y minúsculas varían según el apellido. Ciertos apellidos, como McDonald u O'Conor, tienen letras mayúsculas distintas a la primera. –

Respuesta

83

Si sólo hay una palabra-NSString, a continuación, utilizar el método

-capitalizedString

NSString *capitalizedString = [myStr capitalizedString]; // capitalizes every word 

De lo contrario, para las cadenas de múltiples palabras, tiene que extraer primero el carácter y hacer sólo eso de caracteres en mayúsculas.

+1

como se indica a continuación: este método escribe cada palabra del 'NSString' –

+9

" capitalizedString "Devuelve: una cadena con el primer carácter de cada palabra en el receptor cambió a su valor en mayúscula correspondiente y todos los caracteres restantes a sus valores minúsculos correspondientes . – fullMoon

+3

Esta respuesta es correcta e incorrecta – Mutawe

57

(2014-07-24: La respuesta aceptada actualmente no es correcta) La pregunta es muy específica: Ponga la primera letra en mayúscula, deje el resto en minúscula. El uso de mayúscula en mayúscula produce un resultado diferente: "Cadena en mayúscula" en lugar de "Cadena en mayúscula". Existe otra variante dependiendo de la configuración regional, que es capitalizedStringWithLocale, pero no es correcto para español, en este momento está usando las mismas reglas que en Inglés, por lo que esta es la forma en que lo estoy haciendo para el español:

NSString *abc = @"this is test"; 

abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ];  
NSLog(@"abc = %@",abc); 
+2

¿No es eso exactamente lo que hace la respuesta del berilio? –

+8

No, la respuesta de Beryllium capitaliza cada palabra de un NSString. –

+3

esto arrojará una excepción en la cadena vacía –

6

esto es para su categoría NSString+Util ...

- (NSString *) capitalizedFirstLetter { 
    NSString *retVal; 
    if (self.length < 2) { 
     retVal = self.capitalizedString; 
    } else { 
     retVal = string(@"%@%@",[[self substringToIndex:1] uppercaseString],[self substringFromIndex:1]); 
    } 
    return retVal; 
} 

Usted puede hacer eso con NSString stringWithFormat, por supuesto. Yo uso esta rareza:

#define string(...) \ 
[NSString stringWithFormat:__VA_ARGS__] 
+0

No es necesario verificarlo porque no se llamará a su método de categoría en ese caso. Y las primeras tres condiciones se pueden reemplazar con if (self.length <= 1) return self.capitalizedString por simplicidad. –

+0

Tienes razón, pero creo que si el String fuera desasignado, podría ser nulo. Su punto permanece, sobre simplificar. Gracias –

+0

Incluso si la cadena fue desasignada (lo que solo podría suceder en un contexto multiproceso con gestión de memoria errónea), el self seguiría siendo un puntero colgante y no sería nulo. –

1

aquí es una extensión rápida de que

extension NSString { 
    func capitalizeFirstLetter() -> NSString { 
     return self.length > 1 ? 
      self.substringToIndex(1).capitalizedString + self.substringFromIndex(1) : 
      self.capitalizedString 
    } 
} 
0

Ésta es la forma en que trabajó para mí:

NSString *serverString = jsonObject[@"info"]; 

NSMutableString *textToDisplay = [NSMutableString stringWithFormat:@"%@", serverString]; 

[textToDisplay replaceCharactersInRange:NSMakeRange(0, 1) withString:[textToDisplay substringToIndex:1].capitalizedString]; 

cell.infoLabel.text = textToDisplay; 

espero que ayude.

-1

Swift:

let userName = "hard CODE" 
yourLabel.text = userName.localizedUppercaseString 

recomiendo el uso de esta versión localizada de mayúsculas, ya que los nombres son sensible al entorno local.

7

En caso de que alguien todavía está interesada en el año 2016, aquí es una Swift 3 extensión:

extension String { 
    func capitalizedFirst() -> String { 
     let first = self[self.startIndex ..< self.index(startIndex, offsetBy: 1)] 
     let rest = self[self.index(startIndex, offsetBy: 1) ..< self.endIndex] 
     return first.uppercased() + rest.lowercased() 
    } 

    func capitalizedFirst(with: Locale?) -> String { 
     let first = self[self.startIndex ..< self.index(startIndex, offsetBy: 1)] 
     let rest = self[self.index(startIndex, offsetBy: 1) ..< self.endIndex] 
     return first.uppercased(with: with) + rest.lowercased(with: with) 
    } 
} 

continuación, se utiliza exactamente como si se tratara de la habitual uppercased() o en mayúsculas():

myString.capitalizedFirst() o myString.capitalizedFirst(with: Locale.current)

5

Simplemente

- (NSString *)capitalizeFirstLetterOnlyOfString:(NSString *)string{ 
    NSMutableString *result = [string lowercaseString].mutableCopy; 
    [result replaceCharactersInRange:NSMakeRange(0, 1) withString:[[result substringToIndex:1] capitalizedString]]; 

    return result; 
} 
Cuestiones relacionadas