Установите пользовательский шрифт кнопок, не переопределяя его значением, установленным в раскадровке.

У меня есть пользовательская кнопка AdvisorButton.h, и в процессе инициализации я устанавливаю шрифт кнопки, но я считаю, что они переопределяются настройками раскадровки для кнопки.

Вот реализация:

-(id)initWithFrame:(CGRect)frame
{
    if ((self = [super initWithFrame:frame]))
    {
        [self initializationCodeMethod];
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super initWithCoder:aDecoder]))
    {
        [self initializationCodeMethod];
    }
    return self;
}

-(id)initializationCodeMethod
{

    if(self.tag == 1)
    {
        UIFont *theFont = [UIFont fontWithName:@"DINOT-Light" size:20];
        [self.titleLabel setFont:theFont];
    }
    else
    {
        UIFont *theFont = [UIFont fontWithName:@"VWHeadlineOT-Book" size:20];
        [self.titleLabel setFont:theFont];
    }
    return self;
}

Объекты шрифта инициализируются правильно, и если я распечатаю их, они будут иметь значение и т.д.

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

Правильно ли я думаю, что значения раскадровки устанавливаются после вызова функции инициализации?

Любое понимание этой проблемы окажется полезным!

РЕДАКТИРОВАТЬ: обратите внимание, что я проверил шрифт, прежде чем пытаться его установить, и он установил шрифт по умолчанию из раскадровки, что нормально.

Затем я снова проверяю его после того, как он предположительно установлен, и он все тот же.


person Russell Cargill    schedule 03.12.2014    source источник


Ответы (4)


Убедитесь, что вы добавили имя своего пользовательского класса кнопок в раздел инспектора идентификации для соответствующего класса кнопок в раскадровкеRefer the image

также попробуйте установить шрифт в

- (void)drawRect:(CGRect)rect
{
    if ((self = [super initWithCoder:aDecoder]))
    {
        [self initializationCodeMethod];
    }
    return self;
}

в вашем пользовательском классе кнопок

person Sudhin Davis    schedule 03.12.2014
comment
У меня есть класс AdvisorButton. - person Russell Cargill; 03.12.2014
comment
Переназначить self и воссоздать его с нуля на каждом drawRect? Это звучит как плохая идея для меня. - person Cyrille; 05.12.2014

NSAttributedString включает в себя один или несколько шрифтов. Если вы хотите изменить шрифт, вам нужно воссоздать NSAttributedString с нужным шрифтом или удалить его и использовать UILabel.text напрямую. В этом случае будет действовать UILabel.font.

В качестве побочного эффекта вы можете создать строку с атрибутами без какого-либо набора шрифтов, в этом случае, вероятно, будет иметь значение UILabel.font. Я заметил такое поведение с UIColor.textColor.

person Ben Affleck    schedule 03.12.2014

Вы добавили шрифты в info.plist в разделе: «Шрифты, предоставленные приложением» — элемент 0 — yourfontname.OTF

Почему-то раскадровке это не нужно, но мне это было нужно, когда я пытался менять шрифты программно.

person Ńike Kamstra    schedule 03.12.2014

Решено

Получается из текста объекта на раскадровке ничего, кроме системного по умолчанию, любые изменения переопределяются настройками раскадровки.

Я лично атрибутировал текст с подчеркиванием и т. д., и он не обновлялся.

Я удалил атрибуты, но оставил другой шрифт, отличный от стандартного, и мне не удалось заменить шрифт.

Поэтому я вернул его по умолчанию, и это позволило мне заменить шрифт.

person Russell Cargill    schedule 03.12.2014