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 ?

44
demandé sur Tamás Sengel 2012-01-26 21:08:18

9 réponses

S'il n'y a qu'un seul mot-NSString, utilisez la méthode

-capitalizedString

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.

89
répondu beryllium 2016-02-15 09:28:13

(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);
59
répondu josema.vitaminew 2014-07-24 21:59:02

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)

8
répondu winterized 2016-09-27 14:56:45

Simplement

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

     return result;
}
6
répondu Amr Lotfy 2016-11-05 07:47:29

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__]
6
répondu Dan Rosenstark 2016-11-06 16:38:19

Voici une extension swift pour cela

extension NSString {
    func capitalizeFirstLetter() -> NSString {
        return self.length > 1 ?
          self.substringToIndex(1).capitalizedString + self.substringFromIndex(1) :
          self.capitalizedString
    }
}
1
répondu calql8edkos 2015-05-21 19:53:23

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.

1
répondu ppalancica 2016-08-08 15:30:39

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.
0
répondu Suraj K Thomas 2018-05-17 09:23:48

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.

-1
répondu Juan Boero 2016-09-19 19:44:57