对UIButton进行子类化并设置fontSize

时间:2014-02-11 17:39:27

标签: ios

我正在为UIButton创建子类,为应用程序设置一些默认值,但由于某些原因我无法更改字体大小。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // id button, set defaults
        [self setTintColor:[UIColor blueColor]];
        [self.titleLabel setFont:[UIFont systemFontOfSize:40.0]];
        [self.layer setBorderWidth:1.0f];
        [self.layer setBorderColor:[[UIColor blackColor] CGColor]];
    }
    return self;
}

我可以改变颜色和其他属性,但不是fontize,它没有效果吗?

    idButton *LButton = [idButton buttonWithType:UIButtonTypeRoundedRect];
    [LButton setTitle:@"Login" forState:UIControlStateNormal];
    LButton.frame = CGRectMake(0, buttonY+(buttonHeight/2), screenWidth, buttonHeight);
    [self addSubview:LButton];

4 个答案:

答案 0 :(得分:2)

您的代码存在的问题是UIButton的方法setTitle:forState:会将字体重置为默认值。

一种解决方案是覆盖此方法以使用NSAttributedString。这也允许您设置其他属性:

- (void) setTitle:(NSString *)customTitle forState:(UIControlState)state {
    if (customTitle) {
        NSMutableAttributedString *mas = [[NSMutableAttributedString alloc] initWithString:customTitle];
        NSRange range = NSMakeRange(0, [customTitle length]);

        [mas addAttribute:NSFontAttributeName
                    value:[UIFont systemFontOfSize:40.0]
                    range:range];

        [mas addAttribute:NSKernAttributeName
                    value:@(1.1)
                    range:range];

        [self setAttributedTitle:mas forState:state];
    } else {
        [super setTitle:customTitle forState:state];
    }
}

答案 1 :(得分:0)

亲爱的,我们在泡菜......

您使用的是xib还是故事板。

如果是,则initWithFrame:不会被调用

尝试awakeFromNib

initWithCoder:

答案 2 :(得分:0)

+[UIButton buttonWithType]the documentation

buttonWithType:不会返回UIButton子类的实例(例如您的LButton)。

如果您使用initWithFrame方法设置字体,则应改为呼叫[[LButton alloc] initWithFrame:]

idButton *LButton = [[LButton alloc] initWithFrame:frame];

答案 3 :(得分:0)

我解释了如何执行此操作,inside this post.您正在寻找self.titleLabel.font.pointSize。您也可以使用UILabel扩展程序执行此操作,但必须使用self.font.pointSize

如果您必须支持多种语言,还可以使用其他方法检查语言代码,并根据此更改UIFont

您只需要在UIFont内设置awakeFromNib

[self.titleLabel setFont:
  [UIFont fontWithName:kFont size:self.titleLabel.font.pointSize]];

获取特定字体。

- (UIFont *)whichFontShouldBeUsed{

    UIFont *fontToUse = [UIFont fontWithName:kFontBold 
                                        size:self.titleLabel.font.pointSize];

    if( [_language isEqualToString:@"tr"] &&
        [_language isEqualToString:@"pl"] ){

        fontToUse = [UIFont fontWithName:FOO 
                                    size:self.titleLabel.font.pointSize];
    }
    return fontToUse;
}