Jak ustawić własną rodzinę czcionek jako czcionkę systemową w aplikacji ios [duplikat]

To pytanie ma już odpowiedź tutaj:

Pracuję nad aplikacją ios, w której muszę używać niestandardowych czcionki dla interfejsu użytkownika. Wiem, jak zintegrować nowe niestandardowe czcionki w aplikacji. Do tego mam

  1. pobierz pliki z rodziny czcionek .rozszerzenie ttf.
  2. dodaj je do pakietu zasobów.
  3. W info.plik plist dodać z kluczowych czcionek dostarczonych przez aplikację.

Ta niestandardowa czcionka pokazuje efekt. Ale chcę je ustawić jako systemFont. Więc nie muszę ustawiać ich we wszystkich elementach UI.

I want something like

[[UIApplication sharedApplication] systemFont:@"Arial"];
Czy to możliwe? Can ktoś mi w tym pomoże?
Author: rmaddy, 2013-10-23

1 answers

Miałem ten sam problem podczas aktualizacji mojej aplikacji na iOS dla iOS 7. Chciałem ustawić niestandardową czcionkę dla całej aplikacji, nawet dla kontrolek nie można dostosować ich czcionki (np. selektory).
Po odrobinie badań w Internecie i na Twitterze, rozwiązałem używając metody Swizzling, która jest praktyką, 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: niebezpieczeństwa metody Swizzling

Jednak, to jest to, co zrobić:

  1. Utwórz kategorię UIFont, jak UIFont+CustomSystemFont.
  2. Import <objc/runtime.h> w Twoim .plik M.
  3. Zostawićplik H niezmodyfikowany i dodaj 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);
}
 16
Author: matteodv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:00