Как сделать первую букву заглавной в UILabel? - PullRequest
47 голосов
/ 26 января 2012

Я разрабатываю приложение для iPhone. В метке я хочу показать первую букву пользователя в верхнем регистре имени. Как мне это сделать?

Ответы [ 9 ]

94 голосов
/ 26 января 2012

Если есть только одно слово String, используйте метод

-капитализированный

let capitalizedString = myStr.capitalized // capitalizes every word

В противном случае, для строк из нескольких слов вы должны извлечь сначаласимвол и сделать только этот символ в верхнем регистре.

61 голосов
/ 15 июля 2013

(2014-07-24: в настоящее время принят неправильный ответ) Вопрос очень специфический: введите первую букву в верхнем регистре, оставшуюся в нижнем регистре.Использование прописной строки приводит к другому результату: «Заглавная строка» вместо «Заглавная строка».Существует другой вариант, зависящий от локали, который называется capitalizedStringWithLocale, но он не подходит для испанского, сейчас он использует те же правила, что и для английского, поэтому я делаю это для испанского:

NSString *abc = @"this is test";

abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ];       
NSLog(@"abc = %@",abc);
8 голосов
/ 27 сентября 2016

В случае, если кто-то все еще заинтересован в 2016 году, вот расширение 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)
    }
}

Затем вы используете его точно так же, как и для обычного прописного () или заглавного():

myString.capitalizedFirst() или myString.capitalizedFirst(with: Locale.current)

7 голосов
/ 05 ноября 2016

Просто

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

     return result;
}
7 голосов
/ 25 июля 2014

Это для вашей 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;
}

Конечно, вы можете сделать это с NSString stringWithFormat.Я использую эту странность:

#define string(...) \
[NSString stringWithFormat:__VA_ARGS__]
1 голос
/ 17 мая 2018

Как расширение принятого ответа

capitalizedString используется для написания заглавных букв.

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

Но если у вас много слов в строке и вы хотитечтобы получить только первый символ в верхнем регистре, используйте приведенное ниже решение

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 голос
/ 08 августа 2016

Вот как это работает для меня:

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

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

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

cell.infoLabel.text = textToDisplay;

Надеюсь, это поможет.

1 голос
/ 21 мая 2015

вот быстрое расширение для него

extension NSString {
    func capitalizeFirstLetter() -> NSString {
        return self.length > 1 ?
          self.substringToIndex(1).capitalizedString + self.substringFromIndex(1) :
          self.capitalizedString
    }
}
0 голосов
/ 19 сентября 2016

Swift:

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

Я рекомендую использовать эту локализованную версию верхнего регистра, так как имена чувствительны к локали.

...