2013-10-23 12 views
8

Pracuję nad aplikacją ios, w której muszę używać niestandardowych czcionek dla interfejsów użytkownika. Wiem, jak integrować nowe niestandardowe czcionki w aplikacji. W tym celu mamJak ustawić niestandardową rodzinę czcionek jako czcionkę systemową w aplikacji ios

  1. Pobieranie rodzin czcionek z rozszerzeniem .ttf.
  2. Dodaj je do pakietu zasobów.
  3. W pliku info.plist dodaj kluczem Czcionki dostarczone przez aplikację.

Ta niestandardowa czcionka pokazuje efekt. Ale chcę to zrobić, chcę ustawić je jako systemFont. Nie muszę więc ustawiać ich we wszystkich elementach interfejsu użytkownika.

chcę coś

[[UIApplication sharedApplication] systemFont:@"Arial"]; 

Czy to możliwe? Czy ktoś może mi w tym pomóc?

+0

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

Odpowiedz

16

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ć:

  1. Tworzenie kategorii UIFont, jak UIFont + CustomSystemFont.
  2. Zaimportuj plik <objc/runtime.h> w pliku .m.
  3. 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); 
} 
+1

Hej Matteodv !! To wspaniała praca ponad 100 z mojej strony. Ty sam dużo pracy i czasu dla mnie ..... –

+0

Czy jest to zgodne z wytycznymi Apple? To na pewno mi pomoże ... –

+0

Tak, jest to dozwolone przez wytyczne Apple, ponieważ zaktualizowałem moją aplikację na iOS 7 przy użyciu tych metod i nie miałem żadnych problemów! – matteodv

Powiązane problemy