Как установить собственный шрифт для всего приложения? - PullRequest
9 голосов
/ 30 сентября 2011

Есть ли способ как применить глобальный шрифт [новый пользовательский шрифт] ко всему приложению в iphone target-c.

Я знаю, что мы можем использовать метод ниже, чтобы установить шрифт для каждой метки

[self.titleLabel setFont:[UIFont fontWithName:@"FONOT_NAME" size:FONT_SIZE]];

Но я хочу изменить для всего приложения. Пожалуйста, помогите мне, если кто-нибудь знает.

Ответы [ 5 ]

5 голосов
/ 30 сентября 2011

Видимо, чтобы изменить ВСЕ UILabels в целом, вам нужно установить категорию на UILabel и изменить шрифт по умолчанию.Итак, вот решение для вас:

Создать файл CustomFontLabel.h

@interface UILabel(changeFont)
- (void)awakeFromNib;
-(id)initWithFrame:(CGRect)frame;
@end

Создать файл CustomFontLabel.m

@implementation UILabel(changeFont)
- (void)awakeFromNib
{
    [super awakeFromNib];
    [self setFont:[UIFont fontWithName:@"Zapfino" size:12.0]];
}

-(id)initWithFrame:(CGRect)frame
{
    id result = [super initWithFrame:frame];
    if (result) {
        [self setFont:[UIFont fontWithName:@"Zapfino" size:12.0]];
    }
    return result;
}
@end

Сейчас ... в любом представленииКонтроллер, вам нужны эти пользовательские метки шрифтов, просто добавьте вверху:

#import "CustomFontLabel.h"

Вот и все - удачи

3 голосов
/ 28 августа 2013

Решение Ican с категорией может быть предпочтительным только для сохранения дня.Но избегайте использования категории для переопределения существующих методов, как объясняет apple: Избегайте столкновений имен методов категории

... Если имя метода, объявленного в категории, совпадает сметод в исходном классе, или метод в другой категории в том же классе (или даже суперкласс), поведение не определено относительно того, какая реализация метода используется во время выполнения....

Обратите внимание, что переопределение -(id) init; будет безопаснее, чем переопределение -(id)initWithFrame:(CGRect)frame.Вы не столкнетесь с проблемой не получения сенсорных событий при нажатии на ярлык на кнопках UIB.

1 голос
/ 30 сентября 2011

Это то, что вы имеете в виду?

@interface GlobalMethods
+(UIFont *)appFont;
@end

@implementation GlobalMethods
+(UIFont *)appFont{
    return [UIFont fontWithName:@"someFontName" size:someFontSize];
}
@end

...
[self.titleLabel setFont:[GlobalMethods appFont]];

Если вы хотите сделать это как-то автоматически (без использования setFont на каждом элементе управления), я не верю, что это возможно.

0 голосов
/ 13 февраля 2018

CustomLabel.h

#import <UIKit/UIKit.h>

@interface VVLabel : UILabel

@end

CustomLabel.m

#import "CustomLabel.h"
#define FontDefaultName @"YourFontName"
@implementation VVLabel
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder: aDecoder];
    if (self) {
        // Initialization code
        // Static font size
        self.font = [UIFont fontWithName:FontDefaultName size:17];


        // If you want dynamic font size (Get font size from storyboard / From XIB then put below line)
        self.font = [UIFont fontWithName:FontDefaultName size:self.font.pointSize];

    }
    return self;
}
0 голосов
/ 30 сентября 2011

Если вы можете ограничить свое приложение - или эту конкретную функцию - iOS 5, появится новый API, который позволяет очень удобно оформлять пользовательский интерфейс по умолчанию. Я не могу дать вам подробности, так как они все еще находятся под NDA на момент написания этой статьи. Взгляните на iOS 5 beta SDK, чтобы узнать больше.

...