Miałem ten sam problem podczas aktualizowania aplikacji na system iOS na iOS 7. Chciałem ustawić niestandardową czcionkę dla całej aplikacji, nawet w przypadku kontrolek, którym nie wolno dostosowywać czcionki (np. Selektorów).
Po kilku badaniach w Internecie i na Twitterze rozwiązałem metodę Swizzling, która polega na wymianie implementacji metod.
UWAGA: Ta metoda może być niebezpieczna, jeśli nie będzie używana ostrożnie! Przeczytaj tę dyskusję na SO: Dangers of Method Swizzling
Jednakże, to co należy zrobić:
- Tworzenie kategorii UIFont, jak UIFont + CustomSystemFont.
- Zaimportuj plik
<objc/runtime.h>
w pliku .m.
- Zostaw .h plik był modyfikowany i dodać ten kod do .m:
+(UIFont *)regularFontWithSize:(CGFloat)size
{
return [UIFont fontWithName:@"Your Font Name Here" size:size];
}
+(UIFont *)boldFontWithSize:(CGFloat)size
{
return [UIFont fontWithName:@"Your Bold Font Name Here" size:size];
}
// Metoda Swizzling
+(void)load
{
SEL original = @selector(systemFontOfSize:);
SEL modified = @selector(regularFontWithSize:);
SEL originalBold = @selector(boldSystemFontOfSize:);
SEL modifiedBold = @selector(boldFontWithSize:);
Method originalMethod = class_getClassMethod(self, original);
Method modifiedMethod = class_getClassMethod(self, modified);
method_exchangeImplementations(originalMethod, modifiedMethod);
Method originalBoldMethod = class_getClassMethod(self, originalBold);
Method modifiedBoldMethod = class_getClassMethod(self, modifiedBold);
method_exchangeImplementations(originalBoldMethod, modifiedBoldMethod);
}
Nie było '[[wygląd UILabel] setFont: [UIFont fontWithName: @ "YourFontName" rozmiar: 17.0]]; ' który jest teraz przestarzały. Spójrz na link StuartM - thtas dobrą odpowiedzią. – brainray