我有一个UIViewController
,我在其中以编程方式创建了UILabel
。 viewDidLoad:
喜欢这样:
- (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而不会崩溃。
答案 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]];
教程:
答案 2 :(得分:0)
复制项目文件中的字体。添加项目然后添加info.plist
然后把这个方法
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;