2012-01-26 54 views
42

Pracuję nad aplikacją na iPhone'a. W etykiecie chcę wyświetlić pierwszą literę nazwy użytkownika z dużej litery. Jak mogę to zrobić?Jak utworzyć wielką literę pierwszej litery w pliku UILabel?

+0

Gdzie chcesz to pokazać? W polu tekstowym lub etykiecie lub ...? –

+5

Czy sprawdziłeś dokumentację NSString pod kątem jakiejś metody, która brzmi tak, jakby zwracała wielką literę? – UIAdam

+0

Jeśli robisz to na nazwisko, pamiętaj, że reguły wielkich i wielkich liter różnią się od siebie. Niektóre nazwiska, takie jak McDonald czy O'Conor, mają wielkie litery inne niż tylko pierwsze. –

Odpowiedz

83

Jeśli istnieje tylko jedno słowo-NSString, następnie użyć metody

-capitalizedString

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

W przeciwnym razie, dla wielu ciągów słów, trzeba wyodrębnić pierwszy znak i dokonać tylko ta postać dużych liter.

+1

jak wspomniano poniżej: ta metoda zamienia na kapitaliki każde słowo ciągu znaków "NSString" –

+9

"capitalizedString": ciąg znaków z pierwszym znakiem każdego słowa w odbiorniku zmieniony na odpowiadającą mu wielką wartość, a wszystkie pozostałe znaki ustawione na odpowiadające im małe litery . – fullMoon

+3

Ta odpowiedź jest poprawna i niepoprawna. – Mutawe

57

(2014-07-24: Obecnie zaakceptowana odpowiedź jest nieprawidłowa) Pytanie jest bardzo szczegółowe: Utwórz pierwszą wielką literę, pozostaw resztę małymi literami. Używanie capitalizedString daje inny wynik: "Łańcuch pisany wielkimi literami" zamiast "Łańcuch pisany wielkimi literami". Jest jeszcze inny wariant w zależności od lokalizacji, która jest capitalizedStringWithLocale, ale to nie jest poprawna dla hiszpański, teraz to przy użyciu tych samych zasad jak w języku angielskim, tak to jest, jak to robię na hiszpański:

NSString *abc = @"this is test"; 

abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ];  
NSLog(@"abc = %@",abc); 
+2

Czy nie jest to dokładnie to, co robi odpowiedź Beryl? –

+8

Nie, odpowiedź Beryllium kapitalizuje każdy użytek NSString. –

+3

spowoduje to zgłoszenie wyjątku do pustego ciągu znaków –

6

to jest dla danej kategorii 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; 
} 

można zrobić z NSString stringWithFormat, oczywiście. Używam tego weirdness:

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

Nie ma potrzeby sprawdzania !, ponieważ metoda kategorii nie zostanie w tym przypadku wywołana. I pierwsze trzy warunki mogą być zastąpione przez if (self.length <= 1) zwracają self.capitalizedString dla prostoty. –

+0

Masz rację, ale myślę, że jeśli String zostanie zdekonspirowany, może to oznaczać zero. Twój punkt pozostaje, o uproszczeniu. Dzięki –

+0

Nawet jeśli string został zwolniony (co mogło się zdarzyć tylko w kontekście wielowątkowym z błędnym zarządzaniem pamięcią), self pozostawałby zwisającym wskaźnikiem i nie byłby zerowy. –

1

Oto szybka rozbudowa bo

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

Jak to pracował dla mnie:

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

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

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

cell.infoLabel.text = textToDisplay; 

nadzieję, że to pomaga.

-1

Swift:

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

Polecam używanie tej zlokalizowaną wersję wielkimi literami, ponieważ nazwy są narodowe czuły.

7

W przypadku gdy ktoś jest nadal zainteresowany w 2016 roku, o to Swift 3 rozszerzenie:

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

Potem go używać dokładnie tak samo, jak za zwykłe duże litery() lub skapitalizowane():

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

5

Wystarczy

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

    return result; 
} 
Powiązane problemy