Comment faire la première lettre majuscule dans un UILabel?
Je développe une application iPhone. Dans une étiquette, je veux montrer la première lettre d'un utilisateur du nom en majuscule. Comment je fais cela ?
9 réponses
S'il n'y a qu'un seul mot-NSString, utilisez la méthode
NSString *capitalizedString = [myStr capitalizedString]; // capitalizes every word
Sinon, pour les chaînes de mots multiples, vous devez extraire le premier caractère et ne faire que ce caractère en majuscules.
(2014-07-24: la réponse actuellement acceptée n'est pas correcte) la question est très spécifique: faites la première lettre en majuscules, laissez le reste en minuscules. L'utilisation de capitalizedString produit un résultat différent: "chaîne capitalisée" au lieu de "chaîne capitalisée". Il y a une autre variante en fonction de la locale, qui est capitalizedStringWithLocale, mais ce n'est pas correct pour l'espagnol, en ce moment il utilise les mêmes règles qu'en anglais, donc c'est comme ça que je le fais pour l'espagnol:
NSString *abc = @"this is test";
abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ];
NSLog(@"abc = %@",abc);
Si quelqu'un est toujours intéressé par 2016, Voici une extension 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)
}
}
Ensuite, vous l'utilisez exactement comme vous le feriez pour les majuscules() ou majuscules () habituelles:
myString.capitalizedFirst()
ou myString.capitalizedFirst(with: Locale.current)
Simplement
- (NSString *)capitalizeFirstLetterOnlyOfString:(NSString *)string{
NSMutableString *result = [string lowercaseString].mutableCopy;
[result replaceCharactersInRange:NSMakeRange(0, 1) withString:[[result substringToIndex:1] capitalizedString]];
return result;
}
Ceci est pour votre catégorie 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;
}
, Vous pouvez le faire avec NSString stringWithFormat
, bien sûr. J'utilise cette bizarrerie:
#define string(...) \
[NSString stringWithFormat:__VA_ARGS__]
Voici une extension swift pour cela
extension NSString {
func capitalizeFirstLetter() -> NSString {
return self.length > 1 ?
self.substringToIndex(1).capitalizedString + self.substringFromIndex(1) :
self.capitalizedString
}
}
Voici comment cela a fonctionné pour moi:
NSString *serverString = jsonObject[@"info"];
NSMutableString *textToDisplay = [NSMutableString stringWithFormat:@"%@", serverString];
[textToDisplay replaceCharactersInRange:NSMakeRange(0, 1) withString:[textToDisplay substringToIndex:1].capitalizedString];
cell.infoLabel.text = textToDisplay;
J'espère que ça aide.
Comme extension de la réponse acceptée
CapitalizedString est utilisé pour faire des majuscules .
NSString *capitalizedString = [myStr capitalizedString]; // capitalizes every word
Mais si vous avez beaucoup de mots dans une chaîne et que vous voulez obtenir seulement le premier caractère en majuscules, utilisez la solution ci-dessous
NSString *firstCapitalChar = [[string substringToIndex:1] capitalizedString];
NSString *capString = [string stringByReplacingCharactersInRange:NSMakeRange(0,1) withString: capString];
// extract first character and make only that character upper case.
Swift:
let userName = "hard CODE"
yourLabel.text = userName.localizedUppercaseString
Je recommande d'utiliser cette version localisée de majuscules, car les noms sont sensibles aux paramètres régionaux.