分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
我们先实现单个按钮,为了复用,不管单选还是复选按钮都是使用同一个类来实现,为了区别单选还是复选,我们用一个自定义枚举类型CheckButtonStyle属性style来区别,当其值设置为CheckButtonStyleDefault或CheckButtonStyleBox时,为复选按钮:

当其值设为CheckButtonStyleRadio时,为单选按钮:

当按钮在选中/反选状态间切换时,文字左边的图片自动转换。
整个控件是由一个ImageView、一个Label、一个BOOL变量及其他变量组成,.h文件如下:
typedef enum {
CheckButtonStyleDefault = 0,
CheckButtonStyleBox = 1,
CheckButtonStyleRadio = 2
} CheckButtonStyle;
#import <Foundation/Foundation.h>
@interface CheckButton :UIControl {
//UIControl*control;
UILabel* label;
UIImageView* icon;
BOOL checked;
id value,delegate;
CheckButtonStyle style;
NSString *checkname,*uncheckname;//勾选/反选时的图片文件名
}
@property (retain,nonatomic)id value,delegate;
@property (retain,nonatomic)UILabel* label;
@property (retain,nonatomic)UIImageView* icon;
@property (assign)CheckButtonStyle style;
-(CheckButtonStyle)style;
-(void)setStyle:(CheckButtonStyle)st;
-(BOOL)isChecked;
-(void)setChecked:(BOOL)b;
@end
具体实现如下:
#import "CheckButton.h"
@implementation CheckButton
@synthesize label,icon,value,delegate;
-(id)initWithFrame:(CGRect)frame
{
if (self=[super initWithFrame:frame]) {
icon=[[UIImageView alloc]initWithFrame:
CGRectMake(10, 0, frame.size.height, frame.size.height)];
[self setStyle:CheckButtonStyleDefault];//默认风格为方框(多选)样式
//self.backgroundColor=[UIColor grayColor];
[self addSubview:icon];
label=[[UILabel alloc]initWithFrame:CGRectMake(icon.frame.size.width+24, 0,
frame.size.width-icon.frame.size.width-24,
frame.size.height)];
label.backgroundColor=[UIColor clearColor];
label.font=[UIFont fontWithName:@"Arial" size:20];
label.textColor=[UIColor
colorWithRed:0xf9/255.0
green:0xd8/255.0
blue:0x67/255.0
alpha:1];
label.textAlignment=UITextAlignmentLeft;
[self addSubview:label];
[self addTarget:self action:@selector(clicked) forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
-(CheckButtonStyle)style{
return style;
}
-(void)setStyle:(CheckButtonStyle)st{
style=st;
switch (style) {
case CheckButtonStyleDefault:
case CheckButtonStyleBox:
checkname=@"checked.png";
uncheckname=@"unchecked.png";
break;
case CheckButtonStyleRadio:
checkname=@"radio.png";
uncheckname=@"unradio.png";
break;
default:
break;
}
[self setChecked:checked];
}
-(BOOL)isChecked{
return checked;
}
-(void)setChecked:(BOOL)b{
if(b!=checked){
checked=b;
}
if (checked) {
[icon setImage:[UIImage imageNamed:checkname]];
}else {
[icon setImage:[UIImage imageNamed:uncheckname]];
}
}
-(void)clicked{
[self setChecked:!checked];
if (delegate!=nil) {
SEL sel=NSSelectorFromString(@"checkButtonClicked");
if([delegate respondsToSelector:sel]){
[delegate performSelector:sel];
}
}
}
-(void)dealloc{
value=nil;delegate=nil;
[label release];
[icon release];
[super dealloc];
}
@end
使用CheckButton类很简单,构造、设置标签文本等属性,然后addSubview:
CheckButton* cb=[[CheckButton alloc] initWithFrame:CGRectMake(20, 60, 260, 32)];
cb.label.text=@"checkbutton1";
cb.value=[[NSNumber alloc]initWithInt:18];
cb.style=CheckButtonStyleDefault;
[self.view addSubview:cb];
二、单选按钮组的实现
复选按钮无所谓“组”的概念,单选按钮则不同。在同一个组中,单选按钮只允许同时选择一个按钮,不能选多个,因此我们要实现一个单选按钮组的类:
#import <Foundation/Foundation.h>
#import "CheckButton.h"
@interface RadioGroup : NSObject{
NSMutableArray* children;
NSString* text;
id value;
}
@property (readonly)NSString* text;
@property (readonly)id value;
-(void)add:(CheckButton*)cb;
-(void)checkButtonClicked:(id)sender;
@end
#import "RadioGroup.h"
@implementation RadioGroup
@synthesize text,value;
-(id)init{
if (self=[super init]){
children=[[NSMutableArray alloc]init];
}
return self;
}
-(void)add:(CheckButton*)cb{
cb.delegate=self;
if (cb.checked) {
text=cb.label.text;
value=cb.value;
}
[children addObject:cb];
}
-(void)checkButtonClicked:(id)sender{
CheckButton* cb=(CheckButton*)sender;
if (!cb.checked) {
//实现单选
for(CheckButton* each in children){
if (each.checked) {
[each setChecked:NO];
}
}
[cbsetChecked:YES];
//复制选择的项
text=cb.label.text;
value=cb.value;
}
NSLog(@"text:%@,value:%d",text,[(NSNumber*)value intValue]);
}
-(void)dealloc{
[text release];
value=nil;
[children release];
[super dealloc];
}
@end
单选按钮组在ViewController中的使用:
-(id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle *)nibBundleOrNil{
if(self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]){
//单选按钮组
rg=[[RadioGroup
这篇博客介绍了如何在iOS应用中实现自定义的复选框和单选框控件。作者通过创建一个名为CheckButton的类,使用一个枚举属性来区分复选和单选模式,并详细展示了该控件的实现过程,包括UI布局、图片切换以及事件响应。此外,还提到了单选按钮组的实现,通过RadioGroup类来管理单选按钮,确保同一组内只能选中一个按钮。
1万+

被折叠的 条评论
为什么被折叠?



