#import <UIKit/UIKit.h> @interface VCRoot : UIViewController @end #import "VCRoot.h" #import "ChechBox.h" @interface VCRoot () @end @implementation VCRoot - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; //建立選擇控件 ChechBox* checkBox = [[ChechBox alloc] initWithFrame:CGRectMake(100, 100, 30, 30)] ; //只顯示父親視圖有效的範圍,超過父親視圖的範圍,剪切掉不顯示 checkBox.clipsToBounds = YES ; checkBox.on = YES ; [checkBox addTarget:self action:@selector(checkAct) forControlEvents:UIControlEventValueChanged] ; [self.view addSubview:checkBox] ; } -(void) checkAct { NSLog(@"點擊選擇控件!"); } @end
#import <UIKit/UIKit.h> //聲明一個選擇按鈕 //UIControl:能夠響應事件的控件對象 //UIControl:繼承於UIView @interface ChechBox : UIControl { //選中圖片對象 UIImage* _imageSelect ; //取消選中圖片對象 UIImage* _imageNoSelect ; //顯示到視圖上 UIImageView* _imageView ; //選中狀態 BOOL _on ; //事件目標對象,當前控件的事件函數的擁有者對象 //_target:事件函數聲明實如今對象中 //一般使用試圖控器對象做爲此值 id _target ; //事件函數對象(指針)聲明 //用來響應響應的事件處理 //經過外部來賦值 //實如今外部,_target對象中實現 SEL _selector ; } //定義on屬性 @property (assign,nonatomic) BOOL on ; //從新定義setOn函數 -(void) setOn:(BOOL)on ; //設置選中狀態圖片 -(void) setSelectedImage:(UIImage*) image ; //設置取消狀態的圖片 -(void) setNoSelectedImage:(UIImage*) image; //添加事件函數聲明 -(void) addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents ; @end #import "ChechBox.h" @implementation ChechBox - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code //加載圖片對象 _imageSelect = [UIImage imageNamed:@"selected"] ; _imageNoSelect = [UIImage imageNamed:@"noselected"] ; //建立視圖 _imageView = [[UIImageView alloc] initWithImage:_imageNoSelect] ; //只能經過外部的參數設定位置 //不能設定控件的大小 _imageView.frame = CGRectMake(0, 0, 32, 32); _target = nil ; _selector = nil ; _on = NO ; [self addSubview:_imageView] ; } return self; } -(void) setSelectedImage:(UIImage *)image { _imageSelect = image ; _imageView.image = _imageNoSelect ; } -(void) setNoSelectedImage:(UIImage *)image { _imageNoSelect = image ; _imageView.image = _imageNoSelect ; } //添加設置事件函數 -(void) addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents { // controlEvents == 0001100000 // UIControlEventValueChanged== 1000000000 // == 0000000000 if ((controlEvents &UIControlEventValueChanged) != 0) { _target = target ; _selector = action ; } } -(void) setOn:(BOOL)on { //狀態改變 if (_on != on) { _on = on ; if (_on == YES) { _imageView.image = _imageSelect ; } else if (_on == NO) { _imageView.image = _imageNoSelect ; } //respondsToSelector:target對象可否執行_selector函數 //功能:避免程序因爲沒有實現_selector,致使程序直接崩潰 //若是實現:返回值爲YES if ([_target respondsToSelector:_selector] == YES) { //經過target action模式執行事件函數 [_target performSelector:_selector withObject:self afterDelay:0] ; } } } -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { self.on = !self.on ; } @end