J'ai une police ajoutée à mon projet iOS. C'est dans le projet et copié lorsque le projet se construit. Cela semble être une police valide et apparaîtra si je liste toutes les polices sur l'appareil via l'application. J'ai le plist configuré correctement pour inclure la police. Je n'arrive pas à trouver la découverte pour l'utiliser dans mes contrôles de texte, mes boutons, etc., dans la section Storyboard de Xcode 4.2. De plus, cela ne semble pas me permettre de taper le nom de la police, cela me force à utiliser le dialogue de police. J'ai également essayé d'installer cette police dans le système, mais je n'arrive pas à la faire apparaître dans cette liste. Dois-je faire cela uniquement dans le code ou puis-je le faire via l'interface de storyboard?
Notez que je peux obtenir que cela fonctionne dans le code, mais il serait beaucoup plus pratique de le faire via le storyboard.
Je sais que cette question est assez ancienne, mais je me suis efforcé de trouver un moyen simple de spécifier facilement une police personnalisée dans Storyboard (ou Interface Builder) pour iOS 5 et j'ai trouvé une solution relativement pratique.
Tout d’abord, assurez-vous que vous avez ajouté la police au projet en suivant ce tutoriel . N'oubliez pas non plus que la police personnalisée UINavigationBar, UITabBar et UISegmentedControl peut être spécifiée à l'aide de la méthode setTitleTextAttributes:
du UIAppearance proxy .
Ajoutez les catégories ci-dessous au projet pour UIButton, UITextField, UILabel et tout autre composant nécessitant une police personnalisée. Les catégories implémentent simplement une nouvelle propriété fontName
qui modifie la police actuelle de l'élément tout en conservant la taille de la police.
Pour spécifier la police dans Storyboard, sélectionnez simplement l'élément souhaité (libellé, bouton, affichage du texte, etc.) et ajoutez un attribut d'exécution défini par l'utilisateur avec chemin d'accès à la clé défini sur nom de police de type String et une valeur avec le nom de votre police personnalisée.
Et c'est tout, vous n'avez même pas besoin d'importer les catégories. De cette façon, vous n'avez pas besoin d'une prise pour chaque composant d'interface utilisateur nécessitant une police personnalisée et vous n'avez pas besoin de le coder manuellement.
Tenez compte du fait que la police n'apparaîtra pas dans Storyboard, mais vous la verrez lors de l'exécution sur votre appareil ou votre simulateur.
UIButton + TCCustomFont.h:
#import <UIKit/UIKit.h>
@interface UIButton (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end
UIButton + TCCustomFont.m:
#import "UIButton+TCCustomFont.h"
@implementation UIButton (TCCustomFont)
- (NSString *)fontName {
return self.titleLabel.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
UILabel + TCCustomFont.h:
#import <UIKit/UIKit.h>
@interface UILabel (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end
UILabel + TCCustomFont.m:
#import "UILabel+TCCustomFont.h"
@implementation UILabel (TCCustomFont)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
UITextField + TCCustomFont.h:
#import <UIKit/UIKit.h>
@interface UITextField (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end
UITextField + TCCustomFont.m:
#import "UITextField+TCCustomFont.h"
@implementation UITextField (TCCustomFont)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
Également téléchargeable à partir de Gist et aussi en tant que un fichier unique .
Si vous exécutez des erreurs d'exécution parce que la propriété fontName
n'est pas spécifiée, ajoutez simplement l'indicateur -all_load
sous Autre éditeur de liens Indicateur dans les paramètres du projet pour forcer l'éditeur de liens à inclure les catégories.
A partir de Xcode6.0, en tant que Version Xcode6.0 note:
Interface Builder restitue les polices iOS personnalisées intégrées au moment de la conception, donnant ainsi un aperçu plus précis de l'apparence de l'application finale, avec les dimensions correctes.
vous pouvez définir la police de l'étiquette dans le storyboard.Vous pouvez procéder comme suit
Importez les fichiers de police dans votre projet Xcode.
Dans app-info.plist, ajoutez une clé nommée Fonts fournie par l'application. Il s'agit d'un type de tableau, ajoutez tous vos noms de fichier de police au tableau, note: y compris l'extension de fichier.
C'est un bogue dans XCode, présent depuis la version 3.x et toujours non corrigé. Moi aussi j'ai fait face au même problème, j'ai même essayé de l'ajouter à mon système sans succès. Voici un autre article SO à ce sujet Les polices ne s'affichent pas dans Interface Builder
La réponse de Monjer est la bonne. Si, comme moi, vous ne voyez pas la police ajoutée après la compilation, assurez-vous de l'ajouter aux phases de construction (cibles -> phases de construction -> copier les ressources de l'ensemble -> ajouter vos fichiers de police).
Depuis XCode 9.4, XCode ne respecte toujours pas les polices directement dans le storyboard. Vous pouvez les voir au moment de la conception, mais pas au moment de l'exécution. Si vous utilisez l’API fontWithName, vous apprendrez qu’elle renvoie nil, mais lorsqu’il est utilisé dans storyboard/xib, il n’ya aucun moyen de savoir pourquoi elle n’apparaît pas.
Le seul moyen de vous assurer qu'il fonctionne facilement à partir de Storyboard/XIB au moment de l'exécution consiste à ajouter .ttc/.ttf dans Copy Bundle Resources
Build Phase.
Depuis la version 9.4, l’ajout de noms de fichiers de polices à info.plist ne semble plus une obligation.
la solution de redent84 était géniale!
Je voudrais juste ajouter une amélioration, ajouter la catégorie sur NSObject, de sorte que vous ne devez le faire qu'une fois.
NSObject + CustomFont.h
#import <Foundation/Foundation.h>
@interface NSObject (CustomFont)
@property (strong, nonatomic) NSString *fontName;
@property (strong, nonatomic) UIFont *font;
@end
NSObject + CustomFont.m
#import "NSObject+CustomFont.h"
@implementation NSObject (CustomFont)
@dynamic font;
- (NSString *)fontName
{
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName
{
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
Aucune de ces solutions n'a fonctionné pour moi, mais cela a fonctionné.
#import <UIKit/UIKit.h>
@interface UILabelEx : UILabel
@end
#import "UILabelEx.h"
#import "Constants.h"
@implementation UILabelEx
- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
[super traitCollectionDidChange: previousTraitCollection];
self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize];
}
@end