2016-11-03 3 views
1

In meiner App gebe ich Benutzer eine Option zum Ändern der Schriftart der gesamten App. Um dies zu tun gebe ich dem Benutzer eine Liste von Optionen (wie Fett, Semibold, Normal, Dünn usw.). Sobald der Benutzer eine der obigen Optionen auswählt, speichere ich diesen Wert in den NSUserDefaults.So ändern Sie die volle ios App Schriftart programmgesteuert

Jetzt, da der Benutzer seine Option ausgewählt hat, sollte ich die Schriftart meiner ganzen App ändern. Für das gleiche habe ich eine Kategorie

#import "UILabel+Helper.h" 

@implementation UILabel (Helper) 

- (void)setSubstituteFontName:(NSString *)name UI_APPEARANCE_SELECTOR { 

if ([name isEqual: kAppFontSFTextBold]) { 
    self.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]; 
} 
else if ([name isEqual:kAppFontSFTextSemiBold]) { 
    self.font = [UIFont preferredFontForTextStyle:UIFontTextStyleSubheadline]; 
} 
else if ([name isEqual: kAppFontSFTextMedium]) { 
    self.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 
} 
else if ([name isEqual: kAppFontSFTextRegular]) { 
    self.font = [UIFont preferredFontForTextStyle:UIFontTextStyleCaption1]; 
} 
else if ([name isEqual: kAppFontSFTextLight]) { 
    self.font = [UIFont preferredFontForTextStyle:UIFontTextStyleCaption2]; 
} 

// self.font = [UIFont fontWithName:name size:self.font.pointSize]; 
} 

@end 

Aber diese Veränderung in meiner App zu machen Ich habe meine App programmatisch neu zu starten und Apfel, dass nicht unterstützt. Nachdem ich einige Antworten gelesen hatte, wurde mir klar, dass ich meine App mit exit (0) zwangsweise beenden kann.

Sobald der Benutzer die Option auswählt, speichere ich den ausgewählten Wert wie oben erwähnt lokal und beende (0). Jetzt muss der Benutzer die App selbst neu starten.

Ist dieser Ansatz richtig oder nicht? Wenn nicht, bitte schlagen Sie mir eine bessere Lösung vor.

+2

exit (0) sehen die Ablehnung Ihrer Anwendung führen wird aus Apfel –

Antwort

0

Sie können die folgenden Dinge tun. Sie sehen, Sie können einfach einen auslösen, wenn der Benutzer die Schriftart auswählt. Sie können in jedem UIViewController einen Beobachter hinzufügen, in dem sich UILabel s befinden. Dann können Sie einfach die Schriftart UILabel in dieser Methode ändern.

0

Mit dem folgenden Code erreichen Sie Ihr Ziel.

Diese Methode können Sie in appdelegate schreiben und mit create appdelegate's Instanz aufrufen.

Dies ist eine benutzerdefinierte Methode, die Sie aufrufen müssen, während Ihre Benutzerauswahl erfolgt.

2

Registrieren Sie unter Benachrichtigung auf jedem VC bis zum Ende der ViewDidLoad:. Es wird gut sein, es in der Basisklasse aller VC- oder VC-Kategorien hinzuzufügen.

[[NSNotificationCenter defaultCenter] 
          addObserver:self 
          selector:@selector(preferredContentSizeChanged:) 
           name:UIContentSizeCategoryDidChangeNotification 
           object:nil]; 

Und dann in der Wahlmethode aktualisieren Sie Ihre Schrift mit folgenden Methode:

- (void)preferredContentSizeChanged:(NSNotification *)notification { 
    self.textView.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 
} 

Weitere Einzelheiten Core Text

0
//Hope this helps : 

    AnyUIView.appearance().font = UIFont(name: "yourFont", size: yourSize) 

//code this inside AppDelegate in application:didFinishLaunchingWithOptions: method. and also , Be sure to add your chosen font to your projects target if you're using a custom font. 
Verwandte Themen