0

我知道这是一个新手问题,但我是新手,所以这里是:

我希望在我的应用程序(按钮、标签等)中大量使用 Chalkduster 字体,并尝试子类化 UILabel 来实现这一点。我在 Default.h 中有以下内容:

#import <UIKit/UIKit.h>

@interface Default : UILabel
{
UILabel *theLabel;
}

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

@end

这在我的 .m 中:

#import "Default.h"

@implementation Default

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code


UIFont *custom = [[UIFont alloc] init];

custom = [UIFont fontWithName:@"Chalkduster" size:18];

self.font = custom;


NSLog(@"h");
}
return self;
}

@end

当我在界面生成器中更改类并运行时,我没有看到 Chalkduster 字体。我很感激能帮我完成这个设置,因为我相信它会为我节省很多时间。干杯。

4

3 回答 3

11

一些需要解决的问题:

1)您混淆了Default 成为标签和Default 包含标签的想法。self要进行子类化,请去掉类中的属性,并对而不是theLabel(在该if (self) {部分内)进行更改。

2)你在无条件之后编码的任何东西return都不会被执行......我很惊讶编译器没有抱怨这些语句。

编辑:......还有一件事我刚刚意识到。

3) 如果您从 xib 或情节提要加载,则初始化由initWithCoder:而不是完成initWithFrame:,因此:

- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
        self.font = [UIFont fontWithName:@"Chalkduster" size:18];
    }
    return self;
}
于 2012-06-25T14:18:58.303 回答
9

首先,我认为您的子类化不UILabel正确。所以我为你制作了教程,解释了如何去做。您不需要子类化的 IBOutlet 对象。用自己来称呼它。例如:self.font = ...如果你想子类UILabel这样做:

创建标题为myLabel的新类,如下所示:

。H

#import <UIKit/UIKit.h>

@interface MyLabel : UILabel {

}

@end

.m

#import "MyLabel.h"

@implementation MyLabel

-(void)awakeFromNib {

    UIFont *custom = [[UIFont alloc] init];
    custom = [UIFont fontWithName:@"Chalkduster" size:18];

    self.font = custom;
}

@end

现在在情节提要中选择您的标签并转到身份检查器并在自定义类中选择上面创建的类。像这样:

截屏

输出:

截图 2

注意:不要忘记释放自定义,因为您正在分配它。

于 2012-06-25T15:40:27.810 回答
3

向下移动return self;三行。在进行自定义初始化之前从 init 方法返回。

编辑以反映评论中的新信息:

从笔尖反序列化视图时,您还必须覆盖initWithCoder:

于 2012-06-25T14:17:25.473 回答