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?
Odpowiedz
Jeśli istnieje tylko jedno słowo-NSString, następnie użyć metody
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.
jak wspomniano poniżej: ta metoda zamienia na kapitaliki każde słowo ciągu znaków "NSString" –
"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
Ta odpowiedź jest poprawna i niepoprawna. – Mutawe
(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);
Czy nie jest to dokładnie to, co robi odpowiedź Beryl? –
Nie, odpowiedź Beryllium kapitalizuje każdy użytek NSString. –
spowoduje to zgłoszenie wyjątku do pustego ciągu znaków –
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__]
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. –
Masz rację, ale myślę, że jeśli String zostanie zdekonspirowany, może to oznaczać zero. Twój punkt pozostaje, o uproszczeniu. Dzięki –
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. –
Oto szybka rozbudowa bo
extension NSString {
func capitalizeFirstLetter() -> NSString {
return self.length > 1 ?
self.substringToIndex(1).capitalizedString + self.substringFromIndex(1) :
self.capitalizedString
}
}
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.
Swift:
let userName = "hard CODE"
yourLabel.text = userName.localizedUppercaseString
Polecam używanie tej zlokalizowaną wersję wielkimi literami, ponieważ nazwy są narodowe czuły.
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)
Wystarczy
- (NSString *)capitalizeFirstLetterOnlyOfString:(NSString *)string{
NSMutableString *result = [string lowercaseString].mutableCopy;
[result replaceCharactersInRange:NSMakeRange(0, 1) withString:[[result substringToIndex:1] capitalizedString]];
return result;
}
Gdzie chcesz to pokazać? W polu tekstowym lub etykiecie lub ...? –
Czy sprawdziłeś dokumentację NSString pod kątem jakiejś metody, która brzmi tak, jakby zwracała wielką literę? – UIAdam
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. –