本Demo参照网络资源。
下载地址:http://download.csdn.net/detail/zgcrichard/5267065
在开发IOS项目过程中会有多选的需求,虽然IOS提供了UISwitch可以代替多选框,但是有时候还是会怀念C#、JAVA中的多选框,本Demo帮助大家实现了此功能,本Demo实现了界面展示值和实际值之间的轻松获取(例如:界面上展示:是否添加,而后台很有可能就是一个标志符0,1 or 2...)。有需要的可直接拿去,可直接放到项目中使用。本人水平有限纰漏错误在所难免,可以留言建议。
//
// UICheckBoxButton.h
// UICheckBox
//
#import <UIKit/UIKit.h>
@interface UICheckBoxButton : UIControl{
UILabel *label;
UIImageView *icon;
BOOL checked;
id delegate;
NSArray *arr_code;
}
@property (nonatomic,retain)id delegate;
@property (nonatomic,retain)UILabel *label;
@property (nonatomic,retain)UIImageView *icon;
@property (nonatomic,retain)NSArray *arr_code;
-(BOOL)isChecked;
-(void)setChecked:(BOOL)flag;
//显示内容和实际Value
-(void)setValue:(NSString *)Value withArrCode:(NSArray *)ArrCode;
//返回实际Value
-(NSString *)getCode;
@end
//
// UICheckBoxButton.m
// UICheckBox
//
#import "UICheckBoxButton.h"
@implementation UICheckBoxButton
@synthesize label,icon,delegate,arr_code;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
icon = [[UIImageViewalloc]initWithFrame:CGRectMake(0,0, frame.size.height, frame.size.height)];
[self setChecked:NO];
[selfaddSubview:icon];
label = [[UILabelalloc]initWithFrame:CGRectMake(icon.frame.size.width+7,0, frame.size.width-icon.frame.size.width-10, frame.size.height)];
label.backgroundColor = [UIColorclearColor];
label.textAlignment =UITextAlignmentLeft;
[selfaddSubview:label];
[selfaddTarget:selfaction:@selector(clicked)forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
-(BOOL)isChecked{
returnchecked;
}
-(void)setChecked:(BOOL)flag{
if (flag != checked) {
checked = flag;
}
if (checked) {
[icon setImage:[UIImageimageNamed:@"Check1.png"]];
}else{
[icon setImage:[UIImageimageNamed:@"UnCheck1.png"]];
}
}
//复选框选择事件
-(void)clicked{
[selfsetChecked:!checked];
if (delegate !=nil) {
SEL sel =NSSelectorFromString(@"checkButtonClicked");
if ([delegaterespondsToSelector:sel]) {
[delegate performSelector:sel];
}
}
}
//Value是显示的Label arrCode是两个值,index0:选择;index1:不选择
-(void)setValue:(NSString *)Value withArrCode:(NSArray *)ArrCode{
NSCharacterSet *space = [NSCharacterSetwhitespaceCharacterSet];
NSString *trimmValue = [Value stringByTrimmingCharactersInSet:space];
if (ArrCode.count !=2) {
UIAlertView *alert = [[UIAlertViewalloc]
initWithTitle:@"提示"
message:@"UICheckBox_Value"
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles: nil];
[alert show];
[alert release];
return;
}
NSString *Check = [ArrCode objectAtIndex:0];
NSString *UnCheck = [ArrCode objectAtIndex:1];
NSString *trimmCheckCode = [Check stringByTrimmingCharactersInSet:space];
NSString *trimmUnCheckCode = [UnCheck stringByTrimmingCharactersInSet:space];
if ((trimmCheckCode.length ==0 || trimmUnCheckCode.length ==0) && trimmValue.length == 0) {
return;
}else{
self.label.text = Value;
self.arr_code = ArrCode;
}
}
-(NSString *)getCode{
NSString *code = nil;
if (checked) {
code = [self.arr_codeobjectAtIndex:0];
}else{
code = [self.arr_codeobjectAtIndex:1];
}
return code;
}
-(void)dealloc{
delegate = nil;
[label release];
[icon release];
[arr_code release];
[super dealloc];
}
@end
// 使用
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
checkBoxButton = [[UICheckBoxButtonalloc]initWithFrame:CGRectMake(30,50,220,25)];
checkBoxButton.delegate =self;
NSArray *arr = [[NSArrayalloc]initWithObjects:@"check",@"uncheck",nil];
[checkBoxButton setValue:@"test"withArrCode:arr];
[arr release];
[checkBoxButton setChecked:YES];
[checkBoxButton isChecked ];
[self.viewaddSubview:checkBoxButton];
[checkBoxButton release];
}
-(void)checkButtonClicked{
NSLog(@"%@",[checkBoxButtongetCode]);
}