web-dev-qa-db-fra.com

Comment mettre la première lettre en majuscule dans un UILabel?

Je développe une application iPhone. Dans une étiquette, je souhaite afficher la première lettre du nom majuscule d'un utilisateur. Comment je fais ça?

47
HardCode

S'il n'y a qu'une seule chaîne de mots, utilisez la méthode

capitalisé

let capitalizedString = myStr.capitalized // capitalizes every Word

Sinon, pour les chaînes de plusieurs mots, vous devez extraire le premier caractère et ne mettre que ce caractère en majuscule.

91
beryllium

(2014-07-24: La réponse actuellement acceptée n'est pas correcte) La question est très précise: mettez la première lettre en majuscule, laissez le reste en minuscule. L'utilisation de capitalizedString produit un résultat différent: «chaîne capitalisée» au lieu de «chaîne capitalisée». Il existe une autre variante selon les paramètres régionaux, qui est capitalizedStringWithLocale, mais elle n'est pas correcte pour l'espagnol. Elle utilise actuellement les mêmes règles qu'en anglais.

NSString *abc = @"this is test";

abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ];       
NSLog(@"abc = %@",abc);
60
josema.vitaminew

Si quelqu'un est toujours intéressé en 2016, voici un Swift 3 extension:

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 lettres majuscules () ou capitalisées () habituelles:

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

8
winterized

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__]
7
Dan Rosenstark

Simplement

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

     return result;
}
7
Amr Lotfy

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
ppalancica

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
calql8edkos

En prolongement de la réponse acceptée

capitalizedString est utilisé pour créer des lettres majuscules.

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

Mais si vous avez beaucoup de mots dans une chaîne et que vous ne voulez que le premier caractère majuscule, 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.
1
Suraj K Thomas