2013-10-11 4 views
0

Я работаю с новыми API-интерфейсами iOS 7.UIFont fontWithDescriptor: размер: не сохраняет пользовательский атрибут

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

Вот метод UIFont категории я использую:

- (UIFont*)fontWithCustomAttribute:(id)myNewAttribute 
{ 
    UIFontDescriptor *newFontDescriptor = 
     [self.fontDescriptor fontDescriptorByAddingAttributes: 
       [NSDictionary dictionaryWithObject:myNewAttribute 
              forKey:@"NewAttribute"]]; 

    return [UIFont fontWithDescriptor:newFontDescriptor size:0]; 
} 

newFontDescriptor действительно включает myNewAttribute, но не дескриптор возвращенного шрифта.

Есть ли способ иметь пользовательские атрибуты в UIFontDescriptor и сохранять их при создании шрифта?

ответ

0

Да, это возможно. Вы можете написать собственный класс категорий и внутри, которые передают вашу строку и записывают логику внутри вашего класса категории. Поэтому всякий раз, когда вы отправляете строку в метод вашего класса категории, она расширяет функциональность и на основе этого вы получите желаемый результат. Например, ниже приведен код, написанный в классе категории. просто импортировать класс категории в классе регулятора, и называют их ниже способом и передать вашу строку: нет -

-(NSString*)getFontString:(NSString*)font 
    NSString *str=font; 
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc]initWithString:str]; 
    [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,string.length)]; 
    [text setEnabled:YES]; 
    [text setAttributedText:string]; 
0

Вероятно, нет шрифта подобран пользовательских атрибутов (в fontWithDescriptor:size:), поэтому они заблудиться, потому что шрифт который возвращается, не имеет их.

Этот код прекрасно работает при замене:

[NSDictionary dictionaryWithObject:myNewAttribute 
             forKey:@"NewAttribute"]]; 

с .: например

@{UIFontDescriptorFamilyAttribute : @"Georgia"} 

Таким образом, проблема, безусловно, лежит пользовательских атрибутов.

+0

Я понимаю ваш ответ, но моя потребность не в том, чтобы добавить известный атрибут, такой как «Семья», «Размер», «Имя», «Черты» и т. Д. Это больше похоже на добавление личного атрибута, например NSDate, к сохраняться по атрибутам UIFont и использоваться позже в моем коде. Возможно, это неправильный способ сделать это, потому что UIFontDescriptor не должен быть универсальным контейнером данных. – Lola

+0

О, тогда я думаю, что UIFontDescriptor - неправильный способ сделать это. Должен ли ваш персональный атрибут ассоциироваться с шрифтом или, может быть, с строкой? –

Смежные вопросы