¿Cómo hacer que la primera letra sea mayúscula en un UILabel?

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

Si hay solo una palabra-NSString, entonces usa el método

-capitalizedString

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

De lo contrario, para cadenas de palabras múltiples, debe extraer el primer carácter y hacer solo mayúsculas de ese carácter.

(2014-07-24: La respuesta actualmente aceptada no es correcta) La pregunta es muy específica: escriba mayúscula en la primera letra, deje el rest en minúscula. Usar capitalizedString produce un resultado diferente: "String capitalizado" en lugar de "String capitalizado". Hay otra variante dependiendo de la configuration regional, que está en mayúsculas, StringWithLocale, pero no es correcto para el español, ahora está usando las mismas reglas que en inglés, así es como lo hago para el español:

 NSString *abc = @"this is test"; abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ]; NSLog(@"abc = %@",abc); 

En caso de que alguien todavía esté interesado en 2016, aquí hay una extensión Swift 3 :

 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) } } 

Luego lo usa exactamente como lo haría para las mayúsculas () o mayúsculas () habituales:

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

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; } 

Puedes hacerlo con NSString stringWithFormat , por supuesto. Yo uso esta rareza:

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

Simplemente

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

aquí hay una extensión rápida para él

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

Así es como funcionó 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 eso ayude.

Rápido:

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

Recomiendo usar esta versión localizada de mayúsculas, ya que los nombres son sensibles a la configuration regional.