一、练习中为了实现自定义按钮,按钮中的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"];