一、定制可重用的 IB 组件 CheckButton
1、新建 Single View Application,勾选“Use Automatic Referencing Counting”和“UseStoryBoards”。
2、新建一个xib,名为 CheckButton.xib 。创建一个 UIControl 子类 CheckButton,作为 xib 的 File'sowner 的 class。
3、在IB 中将 view 的“Use Autolayout”反选。Size 设置为 Freedom。
4、拖入一个 UIButton,设置 Default 图片和 Selected 图片分别为 checkbox2.png 和 checkbox.png。
5、将 View 和 Button 分别连接至出口 view 和 button。
6、CheckButton 类实现如下:
// CheckButton.h 文件
#import <UIKit/UIKit.h>
@interface CheckButton : UIControl{
}
@property(strong,nonatomic)IBOutletUIButton *button;
@property(strong,nonatomic)NSString* title;
@property (strong, nonatomic) IBOutletUIView *view;
@end
// CheckButton.m 文件
#import "CheckButton.h"
@implementation CheckButton
@synthesize button=button;
-(void)setupView{
[[NSBundlemainBundle] loadNibNamed:@"CheckButton"owner:selfoptions:nil];
[buttonsetFrame:self.bounds];
[buttonaddTarget:selfaction:@selector(doSelect:) forControlEvents:UIControlEventTouchUpInside];
[selfaddSubview:self.view]; //where self.view is IBOutlet connectedwith the actual Xib view I
}
-(id)initWithFrame:(CGRect)frame{
if((self = [superinitWithFrame:frame])){
[selfsetupView];
}
returnself;
}
-(id)initWithCoder:(NSCoder *)aDecoder{
if((self = [superinitWithCoder:aDecoder])){
[selfsetupView];
}
returnself;
}
- (void) awakeFromNib
{
[superawakeFromNib];
[selfaddSubview:self.view];
}
- (void)layoutSubviews{
button.frame=self.bounds;
}
-(BOOL)isSelected{
returnbutton.selected;
}
-(void)setSelected:(BOOL)selected{
[buttonsetSelected:selected];
}
-(NSString*)title{
returnbutton.titleLabel.text;
}
-(void)setTitle:(NSString *)title{
// reserve sufficient space for icon.
[buttonsetTitle:[@" "stringByAppendingString:title] forState:UIControlStateNormal];
}
-(void)doSelect:(UIButton*)sender{
[selfsetSelected:!sender.selected];
[selfsendActionsForControlEvents:UIControlEventTouchUpInside];
}
@end
二、在 ViewController 中使用自定义组件
7、打开故事板,拖一个 UIView 到 view 中,将 class 改为 CheckButton。
8、将 CheckButton 连接至出口 checkbox。
9、在连接面板,将 CheckButton 的 Touch Up Inside 连接到 IBAction :
- (IBAction)saveSecurity:(id)sender {
NSLog(@"save security button isselected:%d",_checkbox.selected);
}
10、在 ViewController 的 viewDidLoad 方法中修改 checkbox 的标题文本:
_checkbox.title=@"记住密码";
11、OK,运行程序,大功告成。源代码在资源中下载。