以编程方式将UILabel字体设置为用户定义的运行时属性

时间:2014-07-24 05:14:24

标签: ios objective-c uinavigationbar

我有一个UIViewController,我在其中以编程方式创建了UILabelviewDidLoad:喜欢这样:

- (void)viewDidLoad
{
    UILabel  *navTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(17, 0, 100, 100)];

    navTitleLabel.backgroundColor = [UIColor clearColor];
    navTitleLabel.textAlignment = NSTextAlignmentCenter;
    navTitleLabel.textColor=[UIColor colorWithHexString:@"#000029"];

    [navTitleLabel setFont:[UIFont fontWithName:@"Pennyscript" size:20]];

    self.navigationItem.titleView = navTitleLabel;
}

我有"用户定义的运行时属性"在ViewController's身份检查器标签中设置:

我在这里尝试做的是以编程方式将UILabel navTitleLabel 的字体设置为我的自定义字体,然后将UILabel添加到navigationBar's titleView。我究竟做错了什么?我怎样才能实现这个目标?

使用VC ID检查器中的UDKA(用户定义的键属性),应用程序崩溃并显示此堆栈跟踪消息:

由于未捕获的异常而终止应用程序' NSUnknownKeyException',原因:' [setValue:forUndefinedKey:]:此类不符合键值fontName的键值编码。&# 39;

当我从ViewController中删除用户定义的密钥属性时,我可以导航到VC而不会崩溃。

3 个答案:

答案 0 :(得分:1)

您获得的例外情况是因为您尝试设置setValue:forKeypath:属性(这是UILabel正在做的事情)。由于您将字符串 fontName 作为键路径传递,iOS会尝试将fontName的属性UILabel设置为值 NavBar标题。这就是您获得异常的原因,因为UILabel没有名为fontName的属性!拨打[label setFont:[UIFont fontWithName:@"Pennyscript" size:20]];就够了!

答案 1 :(得分:1)

在View Controller中将属性定义为:

@property (nonatomic, copy) NSString *myFontName;

在视图控制器中,Identity检查器将Keepath从fontName更改为myFontName

并更改此代码:

[navTitleLabel setFont:[UIFont fontWithName:@"Pennyscript" size:20]];

为:

[navTitleLabel setFont:[UIFont fontWithName:myFontName size:20]];

教程:

  1. Reference
  2. Reference
  3. Reference
  4. Reference

答案 2 :(得分:0)

复制项目文件中的字体。添加项目然后添加info.plist

enter image description here

然后把这个方法

  

UILabel * navTitleLabel = [[UILabel alloc]   initWithFrame:CGRectMake(17,1,0,100)];

navTitleLabel.backgroundColor = [UIColor clearColor];
navTitleLabel.textAlignment = NSTextAlignmentCenter;
navTitleLabel.text = @"hello";
 navTitleLabel.font = [UIFont fontWithName:@"Pennyscript" size:navTitleLabel.font.pointSize];
self.navigationItem.titleView = navTitleLabel;