2009-07-28 11 views

Odpowiedz

37

Musisz to zrobić ręcznie. Jest to jedna z tych rzeczy, które tak często zostały wbudowane w kategorie przez tak wiele osób, że Apple prawdopodobnie nie odważy się dodać go jako faktycznej metody, ponieważ generowałoby kolizje kategorii.

NSString *firstCapChar = [[string substringToIndex:1] capitalizedString]; 
NSString *cappedString = [string stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:firstCapChar]; 

Istnieje oczywiście wiele innych rozwiązań z wykorzystaniem NSMutableString lub w inny sposób chcesz to zrobić za pomocą unichar czy cokolwiek innego.

+0

Niesamowity gość, działa, tak, jak chcę. – rkb

+4

Nie wymuszałoby to, że inne litery będą małe. Komplementarnym rozwiązaniem dla tego przypadku byłoby coś takiego: text = [NSString stringWithFormat: @ "% @% @", [[text substringToIndex: 1] uppercaseString], [[text substringFromIndex: 1] lowercaseString]]; – saulobrito

7
- (NSString *)capitalizedString 

spowoduje, że wszystkie słowa w ciągu będą początkowo pisane wielkimi literami. Jeśli masz w swoim łańcuchu tylko jedno lub dwa słowa, to może być to, czego chcesz.

Here is the NSString class reference.

+0

Nie Po prostu chcę, aby pierwszy alfabet był kapitałem, a nie cały ciąg lub pełne słowa. – rkb

+0

To dziwne, ale wydaje się, że nie jest dostępne dla ios? – Darmen

0

@BrianRamsay odpowiedź jest dobra, ale powoduje, że wszystkie wyrazy są pisane wielką literą, a nie tylko pierwsza. I stworzył komfortowe kategorię @RobNapier odpowiedź:

@interface NSString (Initcap) 

@property (readonly) NSString *initcappedString; 

@end 

@implementation NSString (Initcap) 

- (NSString *)initcappedString { 
    NSString *firstCapChar = [[self substringToIndex:1] capitalizedString]; 
    return [self stringByReplacingCharactersInRange:NSMakeRange(0,1) 
             withString:firstCapChar]; 
} 

@end 

Następny używać go tak jak to str.initcappedString.

Powiązane problemy