2013-10-23 5 views
8

Ich arbeite an einer ios-Anwendung, in der ich benutzerdefinierte Schriftarten für Benutzeroberflächen verwenden muss. Ich kann neue benutzerdefinierte Schriftarten in Anwendungen integrieren. Dafür habe ichSo legen Sie eine benutzerdefinierte Schriftfamilie als Systemschriftart in der iOS-Anwendung fest

  1. Download Schriftfamilie Dateien mit .ttf Erweiterung.
  2. Fügen Sie sie zum Ressourcenpaket hinzu.
  3. In der Datei info.plist add with key Schriftarten, die von der Anwendung bereitgestellt werden.

Diese benutzerdefinierte Schriftarten zeigt Wirkung. Aber was ich tun möchte, ist, ich möchte sie als SystemFont setzen. Also muss ich sie nicht in allen UI-Elementen einstellen.

Ich möchte so etwas wie

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

Ist das möglich? Kann mir jemand dabei helfen?

+0

wurde Es '[[UILabel Aussehen] setFont: [UIFont fontWithName: @ "YourFontName" Größe: 17.0]]; ' welches nun veraltet ist. Sehen Sie sich den Link von StuartM an - das ist eine gute Antwort. – brainray

Antwort

16

Ich hatte das gleiche Problem beim Aktualisieren meiner iOS App für iOS 7. Ich wollte eine benutzerdefinierte Schriftart für die gesamte Anwendung festlegen, auch für Steuerelemente, die nicht erlaubt sind, ihre Schriftart anzupassen (z. B. Picker).
Nach ein wenig Forschung im Internet und auf Twitter, löste ich mit Methode Swizzling, die eine Praxis besteht, die Methodenimplementierungen auszutauschen.

HINWEIS: Diese Methode kann gefährlich sein, wenn sie nicht sorgfältig verwendet wird! Lesen Sie diese Diskussion über SO:

  1. erstellen UIFont Kategorie, wie UIFont + CustomSystemFont: Dangers of Method Swizzling

    jedoch das, was zu tun ist.

  2. Importieren Sie <objc/runtime.h> in Ihre .m-Datei.
  3. Lassen .h-Datei unmodifizierten und fügen Sie diesen Code auf die .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]; 
} 

// Methode 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

Hallo Matteodv !! Das ist eine tolle Arbeit 100+ von meiner Seite. Du gleich viel Arbeit und Zeit für mich ..... –

+0

Ist das in Apples Richtlinien? Es würde mir auf jeden Fall helfen ... –

+0

Ja, es erlaubt durch Apples Richtlinien, da ich meine Anwendung für iOS 7 mit dieser Methode aktualisiert habe und ich hatte keine Probleme! – matteodv