2013-03-26 4 views
0

Я читал разные ответы здесь о пользовательских шрифтах в XCode, но я все еще не могу заставить его работать.Почему мой UILabel не меняет шрифт?

Что я сделал:

Добавлен его Plist. Добавил его в «Копировать ресурсы».

Если я:

for (NSString *familyName in [UIFont familyNames]) 
    { 
     NSLog(@"Family: %@", familyName); 
     NSLog(@"Names = %@", [UIFont fontNamesForFamilyName:familyName]); 
    } 

Это будет печатать:

2013-03-26 17:04:52:214 Appname[21704:2311] Family: Patrick Hand 
2013-03-26 17:04:52:217 Appname[21704:2311] Names = (
    "PatrickHand-Regular" 
) 

И я попытался установить шрифт с обоими:

self.usernameLabel.font = [UIFont fontWithName:@"PatrickHand-Regular" size:30]; 

и

self.usernameLabel.font = [UIFont fontWithName:@"PatrickHand" size:30]; 

Моя самая отчаянная попытка была такой:

for (NSString *familyName in [UIFont familyNames]) 
    { 
     NSLog(@"Family: %@", familyName); 
     NSLog(@"Names = %@", [UIFont fontNamesForFamilyName:familyName]); 
     [self.usernameLabel setFont:[[UIFont fontNamesForFamilyName:familyName] objectAtIndex:0]]; 
     if ([familyName isEqualToString:@"Patrick Hand" ]) 
     { 
     NSLog(@"BREAK!"); 
     break; 
     } 
    } 

Но она по-прежнему не меняется.

Предложения, что попробовать?

+0

Попробуйте установить шрифт на вашем Mac, откройте Книгу Шрифтов и посмотрите, какое имя он там показывает. Это PatrickHand-Regular? –

+0

Он говорит: «Имя PostScript: PatrickHand-Regular» – netigger

+0

сделал BREAK print? –

ответ

1

Если вы хотите что-то изменить в пользовательском интерфейсе с помощью переменной экземпляра IBOutlet, вам необходимо убедиться, что вы вызываете код в соответствующее время.

Например, предположим, что у вас есть класс, как следующее:

@interface MDViewController : UIViewController 

@property (nonatomic, strong) IBOutlet UILabel *usernameLabel; 

@end 

Существует также MDViewController.nib файл, который содержит пользовательский интерфейс контроллера представления, и предположим, что вы хотите установить содержимое поля метка к некоторому значению.

Обычно init методы, такие как init или initWithCoder: называют слишком рано в жизни объекта, чтобы иметь возможность взаимодействовать с объектами в пользовательском интерфейсе, так как файл СИБ еще не был полностью загружен, и ваши IBOutlet переменные экземпляра в этот момент все равно будет nil.

Позже, в методах, как awakeFromNib, viewDidLoad, viewWillAppear и viewDidAppear, то IBOutlets будут правильно установлены и вы можете общаться с объектами пользовательского интерфейса.

В вашем случае или viewWillAppear, вероятно, являются хорошими моментами для установки этого значения (которое зависит от ваших конкретных потребностей).

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