2011-07-29 28 views
1

我有自定義的UIButton類:自定義的UIButton(複選框)添加響應行動的iOS SDK

CheckBox.h 
@interface CheckBox : UIButton { 

BOOL isChecked; 
IBOutlet UIWebView *webview; 
IBOutlet UIImageView *img; 
NSMutableString *labelText; 
NSInteger fontSize; 
NSInteger heightWebView; 
} 


@property (nonatomic,retain) NSMutableString *labelText; 
@property (nonatomic,retain) UIImageView *img; 
@property (nonatomic,retain) UIWebView *webview; 
@property (nonatomic,assign) BOOL isChecked; 
-(IBAction) checkBoxClicked; 
-(void)addText:(NSString *) text redLetter:(NSInteger)redLetter isBold:(NSInteger) 
    isBold; 
-(BOOL)getStatus; 
-(NSString*)getText; 

-(void)setFontSize:(NSInteger)setFontSizeValue; 


@end 

CheckBox.m看待IBAction爲我需要實現的功能有

#import "CheckBox.h" 


@implementation CheckBox 

@synthesize isChecked, webview, img, labelText, delegate; 


- (id)initWithFrame:(CGRect)frame { 
        if (self == [super initWithFrame:frame]) { 
           // Initialization code 
         fontSize = 2; 
         self.isChecked = NO; 
         self.labelText = [[NSMutableString alloc] init]; 
           self.contentHorizontalAlignment = 
              UIControlContentHorizontalAlignmentLeft; 
         img = [[UIImageView alloc] initWithFrame:CGRectZero]; 
         img.image = [UIImage imageNamed:@"checkbox.png"]; 
         [self addSubview:img]; 
         webview = [[UIWebView alloc] initWithFrame:frame]; 
         webview.backgroundColor = [UIColor clearColor]; 
         [webview setOpaque:NO]; 
         webview.userInteractionEnabled = NO; 
         [self addSubview:webview];       

         /*  [self setImage:[UIImage imageNamed: 
                         @"checkbox.png"] 
                     forState:UIControlStateNormal];*/ 

            [self addTarget:self action: 
                     @selector(checkBoxClicked) 
                    forControlEvents:UIControlEventTouchUpInside]; 
         } 
        return self; 
    } 


-(IBAction) checkBoxClicked{ 
        if(self.isChecked ==NO){ 
           self.isChecked =YES; 
           img.image = [UIImage imageNamed:@"checkbox-checked.png"]; 
        }else{ 
           self.isChecked =NO; 
           img.image = [UIImage imageNamed:@"checkbox.png"]; 
        } 

} 


-(BOOL)getStatus{ 
return self.isChecked; 
} 

-(NSString*)getText{ 
return [NSString stringWithFormat:@"%@",self.labelText]; 
} 

-(void)setFontSize:(NSInteger)setFontSizeValue { 
fontSize = setFontSizeValue; 
if (fontSize >2) { 
    heightWebView = fontSize+2; 
} 
} 

-(void)addText:(NSString *) text redLetter:(NSInteger)redLetter isBold:(NSInteger)isBold 
{ 
[self.labelText setString:text]; 
if (redLetter != 0) { 
    NSString *first; 
    NSString *red; 
    NSString *second; 
    first = [text substringWithRange:NSMakeRange(0, redLetter-1)]; 
    red = [text substringWithRange:NSMakeRange(redLetter-1, 1)]; 
    second = [text substringWithRange:NSMakeRange(redLetter, [text length] - redLetter)]; 

    if(isBold == 0) { 
     NSString *html = [NSString stringWithFormat:@"<font size=\"%d\"><p>%@<span style=\"color:red;\">%@</span>%@</p></font>",fontSize, first,red,second]; 
     [webview loadHTMLString:html baseURL:nil]; 
    }else{ 
     NSString *html = [NSString stringWithFormat:@"<font size=\"%d\"><p>%@<span style=\"color:red;\">%@</span>%@</p></font>",fontSize, first,red,second]; 
     [webview loadHTMLString:html baseURL:nil]; 
    } 

}else { 

    if(isBold == 0) { 
     NSString *html = [NSString stringWithFormat:@"<font size=\"%d\"><p>%@</p></font>",fontSize, text]; 
     [webview loadHTMLString:html baseURL:nil]; 
    }else{ 
     NSString *html = [NSString stringWithFormat:@"<font size=\"%d\"><p>%@</p></font>",fontSize, text]; 
     [webview loadHTMLString:html baseURL:nil];   
    } 

} 

} 


- (void)layoutSubviews { 
img.frame = CGRectMake(0, 5, 18 , 18); 
webview.frame = CGRectMake(12, 0-heightWebView, self.bounds.size.width- 11 , 25+heightWebView); 
} 



- (void)dealloc { 
    [webview release]; 
    [img release]; 
       [super dealloc]; 
    } 



@end 

我需要添加功能到這個類,當用戶點擊按鈕在我實現CheckBox類的類將調用一些無效。 讓我解釋一下更好,我想在這裏實現的功能就像在UIAlertView中,你點擊按鈕調用

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
I need something like 
- (void)checkBox:(CheckBox *)checkBox didStatusChanged:(BOOL)checkBoxStatus 

回答

1

聽起來像是你想實現一個委託協議。這將在去的checkbox.h頂部的@interface上述

@protocol CheckBoxDelegate 
@optional 
- (void)checkBox:(CheckBox *)checkBox didStatusChanged:(BOOL)checkBoxStatus; 
@end 

你會再想要將它添加到您的checkbox.h @interface

@property (monatomic, assign) NSObject <CheckBoxDelegate> delegate; 

然後,您可以實現

checkBox:(CheckBox *)checkBox didStatusChanged:(BOOL)checkBoxStatus

功能在您的視圖控制器或任何創造的複選框,併爲每個複選框做

[checkbox setDelegate:self];

內。然後-(IBAction) checkBoxClicked你可以叫

[delegate checkBox:self didStatusChanged:self.isChecked]; 

,這將呼籲類產卵的複選框/委託該方法。

希望這是足夠廣泛的。

蒂姆當然,你要添加 你產卵類,你會與任何其他委託協議的

+0

。 –

+0

是的,thx的答覆,我已經解決它與協議,我有問題,因爲我忘了設置「[複選框setDelegate:自我];」委託給自己。但你的回覆完全正確,thx再次! – itworksinua