自定义UIButton(复选框)将响应程序添加到操作iOS SDK
我有自定义的UIButton类:自定义UIButton(复选框)将响应程序添加到操作iOS SDK,ios,delegates,uibutton,programmatically-created,Ios,Delegates,Uibutton,Programmatically Created,我有自定义的UIButton类: CheckBox.h @interface CheckBox : UIButton { BOOL isChecked; IBOutlet UIWebView *webview; IBOutlet UIImageView *img; NSMutableString *labelText; NSInteger fontSize; NSInteger heightWebView; } @property (nonatomic,retain) NSMutableS
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查看iAction,我需要在那里实现功能
#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
听起来您想要实现一个委托协议。这将位于@interface上方的checkbox.h顶部
@protocol CheckBoxDelegate
@optional
- (void)checkBox:(CheckBox *)checkBox didStatusChanged:(BOOL)checkBoxStatus;
@end
@property (monatomic, assign) NSObject <CheckBoxDelegate> delegate;
然后您需要将其添加到checkbox.h@interface中
@protocol CheckBoxDelegate
@optional
- (void)checkBox:(CheckBox *)checkBox didStatusChanged:(BOOL)checkBoxStatus;
@end
@property (monatomic, assign) NSObject <CheckBoxDelegate> delegate;
这将在生成复选框/委托的类上调用该方法
希望这足够广泛
Tim听起来像是要实现委托协议。这将位于@interface上方的checkbox.h顶部
@protocol CheckBoxDelegate
@optional
- (void)checkBox:(CheckBox *)checkBox didStatusChanged:(BOOL)checkBoxStatus;
@end
@property (monatomic, assign) NSObject <CheckBoxDelegate> delegate;
然后您需要将其添加到checkbox.h@interface中
@protocol CheckBoxDelegate
@optional
- (void)checkBox:(CheckBox *)checkBox didStatusChanged:(BOOL)checkBoxStatus;
@end
@property (monatomic, assign) NSObject <CheckBoxDelegate> delegate;
这将在生成复选框/委托的类上调用该方法
希望这足够广泛
Tim当然,您会像使用任何其他委托协议一样将其添加到生成类中。是的,谢谢回复,我已经用协议解决了它,我有问题,因为我忘了设置“[复选框setDelegate:self];”委托给self。但你的回答完全正确,再次谢谢!当然,您会希望像使用任何其他委托协议一样添加到生成类中。是的,thx for reply,我已经用协议解决了它,我有问题,因为我忘记设置“[checkbox setDelegate:self];”委托给self。但你的回答完全正确,再次谢谢!