【深入浅出IOS开发】彩票-重写按钮控件
2015-03-31 09:28
411 查看
①创建子类继承UIButton,然后关联相应的UIButton控件
②重写initWithCoder 和 initWithFrame里面设置同样的代码,确保不管是通过代码还是xib,storyborad来创建Button都会执行
③重写titleRectForContentRect和imgeRectForContentRect
[objc] view
plaincopy
#import "MJTitleButton.h"
#import <Availability.h>
@interface MJTitleButton()
@property (nonatomic, strong) UIFont *titleFont;
@end
// initWithCoder ---> awakeFromNib
@implementation MJTitleButton
/**
* 从文件中解析一个对象的时候就会调用这个方法
*/
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super initWithCoder:decoder]) {
[self setup];
}
return self;
}
/**
* 通过代码创建控件的时候就会调用
*/
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setup];
}
return self;
}
/**
* 初始化
*/
- (void)setup
{
self.titleFont = [UIFont systemFontOfSize:14];
self.titleLabel.font = self.titleFont;
// 图标居中
self.imageView.contentMode = UIViewContentModeCenter;
}
/**
* 控制器内部label的frame
* contentRect : 按钮自己的边框
*/
- (CGRect)titleRectForContentRect:(CGRect)contentRect
{
CGFloat titleX = 0;
CGFloat titleY = 0;
NSDictionary *attrs = @{NSFontAttributeName : self.titleFont};
CGFloat titleW;
if (iOS7) {
// 只有Xcode5才会编译这段代码
#ifdef __IPHONE_7_0
titleW = [self.currentTitle boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.width;
#else
titleW = [self.currentTitle sizeWithFont:self.titleFont].width;
#endif
} else {
titleW = [self.currentTitle sizeWithFont:self.titleFont].width;
}
CGFloat titleH = contentRect.size.height;
return CGRectMake(titleX, titleY, titleW, titleH);
}
/**
* 控制器内部imageView的frame
*/
- (CGRect)imageRectForContentRect:(CGRect)contentRect
{
CGFloat imageW = 30;
CGFloat imageX = contentRect.size.width - imageW;
CGFloat imageY = 0;
CGFloat imageH = contentRect.size.height;
return CGRectMake(imageX, imageY, imageW, imageH);
}
@end
在Button所在的控制器中,连线实现淡季事件
[objc] view
plaincopy
- (IBAction)titleClick:(UIButton *)sender {
// 1.按钮旋转
[UIView animateWithDuration:0.25 animations:^{
sender.imageView.transform = CGAffineTransformMakeRotation(-M_PI);
}];
// 2.添加uiview
UIView *temp = [[UIView alloc] init];
temp.frame = CGRectMake(10, 10, 100, 30);
temp.backgroundColor = [UIColor redColor];
[self.view addSubview:temp];
}
②重写initWithCoder 和 initWithFrame里面设置同样的代码,确保不管是通过代码还是xib,storyborad来创建Button都会执行
③重写titleRectForContentRect和imgeRectForContentRect
[objc] view
plaincopy
#import "MJTitleButton.h"
#import <Availability.h>
@interface MJTitleButton()
@property (nonatomic, strong) UIFont *titleFont;
@end
// initWithCoder ---> awakeFromNib
@implementation MJTitleButton
/**
* 从文件中解析一个对象的时候就会调用这个方法
*/
- (id)initWithCoder:(NSCoder *)decoder
{
if (self = [super initWithCoder:decoder]) {
[self setup];
}
return self;
}
/**
* 通过代码创建控件的时候就会调用
*/
- (id)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setup];
}
return self;
}
/**
* 初始化
*/
- (void)setup
{
self.titleFont = [UIFont systemFontOfSize:14];
self.titleLabel.font = self.titleFont;
// 图标居中
self.imageView.contentMode = UIViewContentModeCenter;
}
/**
* 控制器内部label的frame
* contentRect : 按钮自己的边框
*/
- (CGRect)titleRectForContentRect:(CGRect)contentRect
{
CGFloat titleX = 0;
CGFloat titleY = 0;
NSDictionary *attrs = @{NSFontAttributeName : self.titleFont};
CGFloat titleW;
if (iOS7) {
// 只有Xcode5才会编译这段代码
#ifdef __IPHONE_7_0
titleW = [self.currentTitle boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.width;
#else
titleW = [self.currentTitle sizeWithFont:self.titleFont].width;
#endif
} else {
titleW = [self.currentTitle sizeWithFont:self.titleFont].width;
}
CGFloat titleH = contentRect.size.height;
return CGRectMake(titleX, titleY, titleW, titleH);
}
/**
* 控制器内部imageView的frame
*/
- (CGRect)imageRectForContentRect:(CGRect)contentRect
{
CGFloat imageW = 30;
CGFloat imageX = contentRect.size.width - imageW;
CGFloat imageY = 0;
CGFloat imageH = contentRect.size.height;
return CGRectMake(imageX, imageY, imageW, imageH);
}
@end
在Button所在的控制器中,连线实现淡季事件
[objc] view
plaincopy
- (IBAction)titleClick:(UIButton *)sender {
// 1.按钮旋转
[UIView animateWithDuration:0.25 animations:^{
sender.imageView.transform = CGAffineTransformMakeRotation(-M_PI);
}];
// 2.添加uiview
UIView *temp = [[UIView alloc] init];
temp.frame = CGRectMake(10, 10, 100, 30);
temp.backgroundColor = [UIColor redColor];
[self.view addSubview:temp];
}
相关文章推荐
- 【深入浅出IOS开发】彩票-重写按钮控件
- 【深入浅出IOS开发】重写按钮控件2
- 【深入浅出IOS开发】重写按钮控件2
- 【深入浅出IOS开发】彩票-按钮中图片的拉伸
- 【深入浅出IOS开发】彩票-按钮中图片的拉伸
- UIButton按钮控件-iOS开发
- UIButton 按钮控件-IOS开发 (实例)
- iOS开发系列之常用自定义控件开发集—自定义下拉列表按钮控件开发
- UIButton 按钮控件-IOS开发
- 【深入浅出IOS开发】彩票-状态栏的设置
- 【深入浅出IOS开发】彩票-去除图标的玻璃质感效果
- iOS开发系列之常用自定义控件开发集—自定义组按钮控件开发
- UIButton 按钮控件-IOS开发
- 【iOS开发-56】案例BUG:按钮的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet
- 【深入浅出IOS开发】彩票-状态栏的设置
- UIButton 按钮控件-IOS开发
- UIButton 按钮控件-IOS开发
- 【深入浅出IOS开发】彩票-代理实现子Controller的切换
- ios基础控件之开关按钮(UISwitch) 分类: ios开发 2015-04-08 21:24 188人阅读 评论(0) 收藏
- 【深入浅出IOS开发】彩票-NavigationController