iOS错误整理--自定义按钮,给按钮内部赋值出现的错误

一、练习中为了实现自定义按钮,按钮中的imageView和titleLabel默认是左右排列的。在练习中自定义为上下排列。

*在以下方法中重新布局按钮中的子控件

 1 - (void)layoutSubviews
 2 {
 3     [super layoutSubviews];
 4     CGFloat buttonH = self.frame.size.height;
 5     CGFloat buttonW = self.frame.size.width;
 6     CGFloat labelH = buttonH - buttonW;
 7     // 布局子控件
 8     self.imageView.frame = CGRectMake(0, 0, buttonW, buttonW);
 9     self.titleLabel.frame = CGRectMake(0, buttonW, buttonW, labelH);
10 }

*子控件布局完成之后,在以下方法设置子控件的颜色,文字,大小之类

注意:按钮的很多属性都是有各种状态的,正常状态,高亮状态等。设置这种属性要加上状态!

设置带有状态的属性,正确代码如下:

 1 - (instancetype)initWithFrame:(CGRect)frame
 2 {
 3     // 调用父类的initWithFrame方法
 4     if (self = [super initWithFrame:frame]) {
 5         self.titleLabel.textAlignment = NSTextAlignmentCenter;
 6         // 设置titleLabel中的字体颜色
 7         [self setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
 8         // 设置按钮背景图片
 9         [self setBackgroundImage:[UIImage imageNamed:@"add"] forState:UIControlStateNormal];
10     } ;
11     return self;
12 }

错误写法:带有状态的属性不能直接赋值,没有效果

        self.titleLabel.text = @"删除";
        self.imageView.image = [UIImage imageNamed:@"add"];
原文地址:https://www.cnblogs.com/gchlcc/p/5305020.html