1.MultiRadioButton.h
#import <UIKit/UIKit.h>
@protocol MutltiRadioButtonDelegate <NSObject>
-(void)MutltiradioButtonSelectedAtIndex:(NSUInteger)index inGroup:(NSString*)groupId;
-(void)MutltiradioButtonTouchDownAtIndex:(NSUInteger)index inGroup:(NSString*)groupId;
@end
@interface MultiRadioButton : UIView {
NSString *_groupId;
NSUInteger _index;
UIButton *_button;
}
@property(nonatomic,retain)NSString *groupId;
@property(nonatomic,assign)NSUInteger index;
-(id)initWithGroupId:(NSString*)groupId index:(NSUInteger)index;
+(void)addObserverForGroupId:(NSString*)groupId observer:(id)observer;
-(void)handleButton1;
-(void)handleButton;
+(void)buttonTouchDown:(MultiRadioButton*)radioButton;
// 可以设置默认选中项
- (void) setChecked:(BOOL)isChecked;
@end
2.MultiRadioButton.m#import "MultiRadioButton.h"
#define kRadioButtonNotification @"kRadioButtonNotification"
@interface MultiRadioButton()
-(void)defaultInit;
-(void)otherButtonSelected:(id)sender;
-(void)handleButtonTap:(id)sender;
@end
@implementation MultiRadioButton
@synthesize groupId=_groupId;
@synthesize index=_index;
static const NSUInteger kRadioButtonWidth=300;
static const NSUInteger kRadioButtonHeight=80;
static NSMutableArray *rb_instances=nil;
static NSMutableDictionary *rb_instancesDic=nil; // 识别不同的组
static NSMutableDictionary *rb_observers=nil;
#pragma mark - Observer
+(void)addObserverForGroupId:(NSString*)groupId observer:(id)observer{
if(!rb_observers){
rb_observers = [[NSMutableDictionary alloc] init];
}
if ([groupId length] > 0 && observer) {
[rb_observers setObject:observer forKey:groupId];
// Make it weak reference
//[observer release];
}
}
#pragma mark - Manage Instances
+(void)registerInstance:(MultiRadioButton*)radioButton withGroupID:(NSString *)aGroupID{
if(!rb_instancesDic){
rb_instancesDic = [[NSMutableDictionary alloc] initWithCapacity:16];
}
if ([rb_instancesDic objectForKey:aGroupID]) {
[[rb_instancesDic objectForKey:aGroupID] addObject:radioButton];
[rb_instancesDic setObject:[rb_instancesDic objectForKey:aGroupID] forKey:aGroupID];
//[radioButton release];
}else {
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:16];
[arr addObject:radioButton];
// [radioButton release];
[rb_instancesDic setObject:arr forKey:aGroupID];
[arr release];
}
}
#pragma mark - Class level handler
+(void)buttonSelected:(MultiRadioButton*)radioButton
{
// Notify observers
if (rb_observers) {
id observer= [rb_observers objectForKey:radioButton.groupId];
if(observer && [observer respondsToSelector:@selector(MutltiradioButtonSelectedAtIndex:inGroup:)]){
[observer MutltiradioButtonSelectedAtIndex:radioButton.index inGroup:radioButton.groupId];
}
}