兼容iOs7的自定义alertView
转载请注明出处。
升级到ios7后,旧项目中使用的继承UIAlertView的自定义alertview无法正常显示了,无奈只好换思路去实现,改成从当前keywindow下创建要显示的alertview,并模仿了系统alertview
.h文件
#import <UIKit/UIKit.h> typedef enum { CustomAlertViewType_Msg_TwoBtn=1,//含有title,提示内容以及两个button. CustomAlertViewType_Msg_OneBtn,//含有title,提示内容以及一个button. CustomAlertViewType_ActivityIndiAndMsg_OneBtn, //含有title,UIActivityIndicatorView控件,提示内容以及一个button. CustomAlertViewType_Msg_TextField_TwoBtn, CustomAlertViewType_JalBreakBuy_Login, CustomAlertViewType_RemindTime, }CustomAlertViewType; @protocol CustomAlertViewDelegate; @interface CustomAlertView : UIView<UITextFieldDelegate> { CustomAlertViewType _alertViewType; id<CustomAlertViewDelegate> _customDelegate; UILabel* titleLabel; UILabel* contentLabel; UIButton* leftBtn; UIButton* rightBtn; UIButton* centerBtn; UIActivityIndicatorView *indicatorView; UITextField* textField; UIView* _alertView; UIView* _bgView; } @property (nonatomic,assign) id<CustomAlertViewDelegate> customDelegate; @property (nonatomic,retain) UILabel* contentLabel; @property (nonatomic,assign) UITextField* textField; //含有title,提示内容以及两个button. - (id)initWithTitle:(NSString*)title msg:(NSString*)msg rightBtnTitle:(NSString*)rightTitle leftBtnTitle:(NSString*)leftTitle delegate:(id<CustomAlertViewDelegate>) _delegate; - (id)initWithTitle:(NSString*)title msg:(NSString*)msg rightBtnTitle:(NSString*)rightTitle leftBtnTitle:(NSString*)leftTitle delegate:(id<CustomAlertViewDelegate>) _delegate msgFontSize:(CGFloat)fontSize; //含有title,提示内容以及一个button. - (id)initWithTitle:(NSString*)title msg:(NSString*)msg centerBtnTitle:(NSString*)centerTitle; //含有title,UIActivityIndicatorView控件,提示内容以及一个button. - (id)initProgressAlertViewWithTitle:(NSString*)title msg:(NSString*)msg centerBtnTitle:(NSString*)centerTitle delegate:(id<CustomAlertViewDelegate>) _delegate; //含有title,textfield,提示内容以及两个button. - (id)initTextFieldWithTitle:(NSString*)title msg:(NSString*)msg rightBtnTitle:(NSString*)rightTitle leftBtnTitle:(NSString*)leftTitle delegate:(id<CustomAlertViewDelegate>) _delegate; //含title,两个button,密码输入textfield,用户名等提示信息 -(id)initLoginWithDelegate:(id<CustomAlertViewDelegate>)delegate userId:(NSString*)userid title:(NSString*)strTitle rightBtnTitle:(NSString*)strRbt; - (id)initRemindAlert; -(void) show; - (void) hideAlertView; -(void) setTitle:(NSString*) title; @end @protocol CustomAlertViewDelegate <NSObject> @optional - (void) leftBtnPressedWithinalertView:(CustomAlertView*)alert; - (void) rightBtnPressedWithinalertView:(CustomAlertView*)alert; - (void) centerBtnPressedWithinalertView:(CustomAlertView*)alert; @end
.m文件
#import "CustomAlertView.h" #import "UIScreen+Frame.h" #import "CustomAlertView.h" #define MAX_CATEGORY_NAME_LENGTH 9 #define kTagViewTextFieldJalBreakPassW (1001) @implementation CustomAlertView @synthesize customDelegate = _customDelegate; @synthesize contentLabel; @synthesize textField; //含有title,提示内容以及两个button. - (id)initWithTitle:(NSString*)title msg:(NSString*)msg rightBtnTitle:(NSString*)rightTitle leftBtnTitle:(NSString*)leftTitle delegate:(id<CustomAlertViewDelegate>) _delegate { if ((self = [super initWithFrame:[[UIScreen mainScreen] LandscapeBounds]])) { // Initialization code _alertViewType=CustomAlertViewType_Msg_TwoBtn; self.customDelegate=_delegate; [self setBackgroundColor:[UIColor clearColor]]; _bgView = [[UIView alloc] initWithFrame:self.frame]; [_bgView setBackgroundColor:[UIColor blackColor]]; [self addSubview:_bgView]; [_bgView release]; CGRect alertRect = [self getAlertBounds]; _alertView = [[UIView alloc] initWithFrame:alertRect]; UIImageView *alertBg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, alertRect.size.width, alertRect.size.height)]; alertBg.image = [UIImage imageNamed:@"AlertView_background.png"]; [_alertView addSubview:alertBg]; [alertBg release]; titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(10, 10, 280, 20)]; titleLabel.textColor = [UIColor whiteColor]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize:17.0]; titleLabel.text =title; titleLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:titleLabel]; [titleLabel release]; contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 260, 40)]; contentLabel.textColor = [UIColor whiteColor]; contentLabel.backgroundColor = [UIColor clearColor]; contentLabel.font = [UIFont systemFontOfSize:15.0]; contentLabel.text =msg; contentLabel.textAlignment=UITextAlignmentCenter; contentLabel.lineBreakMode = UILineBreakModeWordWrap; contentLabel.numberOfLines = 0; [_alertView addSubview:contentLabel]; [contentLabel release]; UIImage* unselectedImg=[UIImage imageNamed:@"button_unselected.png"]; UIImage* selectedImg=[UIImage imageNamed:@"button_selected.png"]; rightBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [rightBtn setBackgroundImage:selectedImg forState:UIControlStateNormal]; [rightBtn setTitle:rightTitle forState:UIControlStateNormal]; rightBtn.frame=CGRectMake(155, 85, selectedImg.size.width, selectedImg.size.height); [_alertView addSubview:rightBtn]; [rightBtn addTarget:self action:@selector(rightBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setBackgroundImage:unselectedImg forState:UIControlStateNormal]; [leftBtn setTitle:leftTitle forState:UIControlStateNormal]; [leftBtn addTarget:self action:@selector(leftBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn.frame=CGRectMake(20, 85, unselectedImg.size.width, unselectedImg.size.height); [_alertView addSubview:leftBtn]; [self addSubview:_alertView]; [_alertView release]; [self showBackground]; [self showAlertAnmation]; } return self; } //可修改字体 - (id)initWithTitle:(NSString*)title msg:(NSString*)msg rightBtnTitle:(NSString*)rightTitle leftBtnTitle:(NSString*)leftTitle delegate:(id<CustomAlertViewDelegate>) _delegate msgFontSize:(CGFloat)fontSize { if ((self = [super initWithFrame:[[UIScreen mainScreen] LandscapeBounds]])) { // Initialization code _alertViewType=CustomAlertViewType_Msg_TwoBtn; self.customDelegate=_delegate; [self setBackgroundColor:[UIColor clearColor]]; _bgView = [[UIView alloc] initWithFrame:self.frame]; [_bgView setBackgroundColor:[UIColor blackColor]]; [self addSubview:_bgView]; [_bgView release]; CGRect alertRect = [self getAlertBounds]; _alertView = [[UIView alloc] initWithFrame:alertRect]; UIImageView *alertBg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, alertRect.size.width, alertRect.size.height)]; alertBg.image = [UIImage imageNamed:@"AlertView_background.png"]; [_alertView addSubview:alertBg]; [alertBg release]; titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(10, 10, 280, 20)]; titleLabel.textColor = [UIColor whiteColor]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize:17.0]; titleLabel.text =title; titleLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:titleLabel]; [titleLabel release]; contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 30, 260, 40)]; contentLabel.textColor = [UIColor whiteColor]; contentLabel.backgroundColor = [UIColor clearColor]; contentLabel.font = [UIFont systemFontOfSize:fontSize]; contentLabel.text =msg; contentLabel.textAlignment=UITextAlignmentCenter; contentLabel.lineBreakMode = UILineBreakModeWordWrap; contentLabel.numberOfLines = 0; [_alertView addSubview:contentLabel]; [contentLabel release]; UIImage* unselectedImg=[UIImage imageNamed:@"button_unselected.png"]; UIImage* selectedImg=[UIImage imageNamed:@"button_selected.png"]; rightBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [rightBtn setBackgroundImage:selectedImg forState:UIControlStateNormal]; [rightBtn setTitle:rightTitle forState:UIControlStateNormal]; rightBtn.frame=CGRectMake(155, 85, selectedImg.size.width, selectedImg.size.height); [_alertView addSubview:rightBtn]; [rightBtn addTarget:self action:@selector(rightBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setBackgroundImage:unselectedImg forState:UIControlStateNormal]; [leftBtn setTitle:leftTitle forState:UIControlStateNormal]; [leftBtn addTarget:self action:@selector(leftBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn.frame=CGRectMake(20, 85, unselectedImg.size.width, unselectedImg.size.height); [_alertView addSubview:leftBtn]; [self addSubview:_alertView]; [_alertView release]; [self showBackground]; [self showAlertAnmation]; } return self; } - (id)initWithTitle:(NSString*)title msg:(NSString*)msg centerBtnTitle:(NSString*)centerTitle { self = [super initWithFrame:[[UIScreen mainScreen] LandscapeBounds]]; if(self) { _alertViewType=CustomAlertViewType_Msg_OneBtn; [self setBackgroundColor:[UIColor clearColor]]; _bgView = [[UIView alloc] initWithFrame:self.frame]; [_bgView setBackgroundColor:[UIColor blackColor]]; [self addSubview:_bgView]; [_bgView release]; CGRect alertRect = [self getAlertBounds]; _alertView = [[UIView alloc] initWithFrame:alertRect]; UIImageView *alertBg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, alertRect.size.width, alertRect.size.height)]; alertBg.image = [UIImage imageNamed:@"AlertView_background.png"]; [_alertView addSubview:alertBg]; [alertBg release]; titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 10, 300, 20)]; titleLabel.textColor = [UIColor whiteColor]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize:17.0]; titleLabel.text =title; titleLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:titleLabel]; [titleLabel release]; contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 45, 260, 20)]; contentLabel.textColor = [UIColor whiteColor]; contentLabel.backgroundColor = [UIColor clearColor]; contentLabel.font = [UIFont systemFontOfSize:15.0]; contentLabel.text =msg; contentLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:contentLabel]; [contentLabel release]; UIImage* selectedImg=[UIImage imageNamed:@"bigbuttonbkimg.png"]; centerBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [centerBtn setBackgroundImage:selectedImg forState:UIControlStateNormal]; [centerBtn setTitle:centerTitle forState:UIControlStateNormal]; centerBtn.frame=CGRectMake(27, 85, 249, 43); [_alertView addSubview:centerBtn]; [centerBtn addTarget:self action:@selector(centerBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_alertView]; [_alertView release]; [self showBackground]; [self showAlertAnmation]; } return self; } //含有title,UIActivityIndicatorView控件,提示内容以及一个button. - (id)initProgressAlertViewWithTitle:(NSString*)title msg:(NSString*)msg centerBtnTitle:(NSString*)centerTitle delegate:(id<CustomAlertViewDelegate>) _delegate { if ((self = [super initWithFrame:[[UIScreen mainScreen] LandscapeBounds]])) { // Initialization code _alertViewType=CustomAlertViewType_ActivityIndiAndMsg_OneBtn; self.customDelegate=_delegate; [self setBackgroundColor:[UIColor clearColor]]; _bgView = [[UIView alloc] initWithFrame:self.frame]; [_bgView setBackgroundColor:[UIColor blackColor]]; [self addSubview:_bgView]; [_bgView release]; CGRect alertRect = [self getAlertBounds]; _alertView = [[UIView alloc] initWithFrame:alertRect]; UIImageView *alertBg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, alertRect.size.width, alertRect.size.height)]; alertBg.image = [UIImage imageNamed:@"AlertView_background.png"]; [_alertView addSubview:alertBg]; [alertBg release]; titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 10, 300, 20)]; titleLabel.textColor = [UIColor whiteColor]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize:17.0]; titleLabel.text =title; titleLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:titleLabel]; [titleLabel release]; indicatorView= [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(80.0, 45.0, 30.0, 30.0)]; indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; indicatorView.hidesWhenStopped=NO; [_alertView addSubview:indicatorView]; [indicatorView release]; [indicatorView startAnimating]; contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(120.0, 50.0, 150.0, 20.0)]; contentLabel.textColor = [UIColor whiteColor]; contentLabel.backgroundColor = [UIColor clearColor]; contentLabel.font = [UIFont boldSystemFontOfSize:15.0]; contentLabel.text =msg; contentLabel.textAlignment=UITextAlignmentLeft; [_alertView addSubview:contentLabel]; [contentLabel release]; UIImage* selectedImg=[UIImage imageNamed:@"button_selected.png"]; centerBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [centerBtn setBackgroundImage:selectedImg forState:UIControlStateNormal]; [centerBtn setTitle:centerTitle forState:UIControlStateNormal]; centerBtn.frame=CGRectMake(27, 85, 249, 43); [_alertView addSubview:centerBtn]; [centerBtn addTarget:self action:@selector(centerBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_alertView]; [_alertView release]; [self showBackground]; [self showAlertAnmation]; } return self; } //含有title,textfield,提示内容以及两个button. - (id)initTextFieldWithTitle:(NSString*)title msg:(NSString*)msg rightBtnTitle:(NSString*)rightTitle leftBtnTitle:(NSString*)leftTitle delegate:(id<CustomAlertViewDelegate>) _delegate { if ((self = [super initWithFrame:[[UIScreen mainScreen] LandscapeBounds]])) { // Initialization code _alertViewType=CustomAlertViewType_Msg_TextField_TwoBtn; self.customDelegate=_delegate; [self setBackgroundColor:[UIColor clearColor]]; _bgView = [[UIView alloc] initWithFrame:self.frame]; [_bgView setBackgroundColor:[UIColor blackColor]]; [self addSubview:_bgView]; [_bgView release]; CGRect alertRect = [self getAlertBounds]; _alertView = [[UIView alloc] initWithFrame:alertRect]; UIImageView *alertBg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, alertRect.size.width, alertRect.size.height)]; alertBg.image = [UIImage imageNamed:@"AlertView_background.png"]; [_alertView addSubview:alertBg]; [alertBg release]; titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 15, 300, 20)]; titleLabel.textColor = [UIColor whiteColor]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize:17.0]; titleLabel.text =title; titleLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:titleLabel]; [titleLabel release]; contentLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 33.0, 300.0, 12.0)]; contentLabel.textColor = [UIColor clearColor]; contentLabel.backgroundColor = [UIColor clearColor]; contentLabel.font = [UIFont boldSystemFontOfSize:8.0]; contentLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:contentLabel]; [contentLabel release]; textField = [[[UITextField alloc] initWithFrame:CGRectMake(21, 45, 260, 30)] autorelease]; textField.borderStyle = UITextBorderStyleRoundedRect; textField.clearButtonMode = UITextFieldViewModeWhileEditing; textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; textField.placeholder = msg; [textField addTarget:self action:@selector(textFieldChanged) forControlEvents:UIControlEventEditingChanged]; [_alertView addSubview:textField]; [textField release]; UIImage* unselectedImg=[UIImage imageNamed:@"button_unselected.png"]; UIImage* selectedImg=[UIImage imageNamed:@"button_selected.png"]; rightBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [rightBtn setBackgroundImage:selectedImg forState:UIControlStateNormal]; [rightBtn setTitle:rightTitle forState:UIControlStateNormal]; rightBtn.frame=CGRectMake(155, 85, selectedImg.size.width, selectedImg.size.height); [_alertView addSubview:rightBtn]; [rightBtn addTarget:self action:@selector(rightBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setBackgroundImage:unselectedImg forState:UIControlStateNormal]; [leftBtn setTitle:leftTitle forState:UIControlStateNormal]; [leftBtn addTarget:self action:@selector(leftBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn.frame=CGRectMake(20, 85, unselectedImg.size.width, unselectedImg.size.height); [_alertView addSubview:leftBtn]; [self addSubview:_alertView]; [_alertView release]; [self showBackground]; [self showAlertAnmation]; } return self; } -(id)initLoginWithDelegate:(id<CustomAlertViewDelegate>)delegate userId:(NSString*)userid title:(NSString*)strTitle rightBtnTitle:(NSString*)strRbt { if ((self = [super initWithFrame:[[UIScreen mainScreen] LandscapeBounds]])) { _alertViewType = CustomAlertViewType_JalBreakBuy_Login; self.customDelegate = delegate; [self setBackgroundColor:[UIColor clearColor]]; _bgView = [[UIView alloc] initWithFrame:self.frame]; [_bgView setBackgroundColor:[UIColor blackColor]]; [self addSubview:_bgView]; [_bgView release]; CGRect alertRect = [self getAlertBounds]; _alertView = [[UIView alloc] initWithFrame:alertRect]; UIImageView *alertBg = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, alertRect.size.width, alertRect.size.height)]; alertBg.image = [UIImage imageNamed:@"AlertView_background.png"]; [_alertView addSubview:alertBg]; [alertBg release]; titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(10, 20, 280, 20)]; titleLabel.textColor = [UIColor whiteColor]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.font = [UIFont boldSystemFontOfSize:17.0]; titleLabel.text = strTitle; titleLabel.textAlignment=UITextAlignmentCenter; [_alertView addSubview:titleLabel]; [titleLabel release]; CGFloat xLabel1 = 20; CGFloat xLabel2 = 120; CGFloat yLevel1 = 50; CGFloat yLevel2 = 100; UILabel* label = nil; label = [[UILabel alloc]initWithFrame:CGRectMake(xLabel1, yLevel1, 100, 40)]; label.backgroundColor = [UIColor clearColor]; label.text = @"账号:"; label.textColor = [UIColor whiteColor]; label.font = [UIFont boldSystemFontOfSize:17.0]; label.textAlignment = UITextAlignmentCenter; [_alertView addSubview:label]; [label release]; label = [[UILabel alloc]initWithFrame:CGRectMake(xLabel2, yLevel1,140, 40)]; label.backgroundColor = [UIColor clearColor]; label.text = userid; label.textColor = [UIColor whiteColor]; label.font = [UIFont boldSystemFontOfSize:17.0]; label.textAlignment = UITextAlignmentLeft; [_alertView addSubview:label]; [label release]; label = [[UILabel alloc]initWithFrame:CGRectMake(xLabel1, yLevel2, 100, 40)]; label.backgroundColor = [UIColor clearColor]; label.text = @"密码:"; label.textColor = [UIColor whiteColor]; label.font = [UIFont boldSystemFontOfSize:17.0]; label.textAlignment = UITextAlignmentCenter; [_alertView addSubview:label]; [label release]; textField = [[[UITextField alloc]initWithFrame:CGRectMake(xLabel2, yLevel2, 140, 40)] autorelease]; textField.delegate = self; textField.textColor = kColorLoginInput; textField.tag= kTagViewTextFieldJalBreakPassW; textField.borderStyle = UITextBorderStyleRoundedRect; textField.secureTextEntry = YES; textField.returnKeyType = UIReturnKeyDone; textField.autocorrectionType = UITextAutocorrectionTypeNo; textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; textField.font = [UIFont systemFontOfSize:17]; textField.clearButtonMode = UITextFieldViewModeWhileEditing; textField.leftViewMode = UITextFieldViewModeAlways; textField.keyboardType = UIKeyboardTypeASCIICapable ; [_alertView addSubview:textField]; [textField release]; UIImage* unselectedImg=[UIImage imageNamed:@"button_unselected.png"]; UIImage* selectedImg=[UIImage imageNamed:@"button_selected.png"]; rightBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [rightBtn setBackgroundImage:selectedImg forState:UIControlStateNormal]; [rightBtn setTitle:strRbt forState:UIControlStateNormal]; rightBtn.frame=CGRectMake(155, 155, selectedImg.size.width, selectedImg.size.height); [_alertView addSubview:rightBtn]; [rightBtn addTarget:self action:@selector(rightBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn=[UIButton buttonWithType:UIButtonTypeCustom]; [leftBtn setBackgroundImage:unselectedImg forState:UIControlStateNormal]; [leftBtn setTitle:@"取消" forState:UIControlStateNormal]; [leftBtn addTarget:self action:@selector(leftBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; leftBtn.frame=CGRectMake(20, 155, unselectedImg.size.width, unselectedImg.size.height); [_alertView addSubview:leftBtn]; [self addSubview:_alertView]; [_alertView release]; [self showBackground]; [self showAlertAnmation]; } return self; } -(void) show { UIWindow* window = [[UIApplication sharedApplication] keyWindow]; NSArray* windowViews = [window subviews]; if(windowViews && [windowViews count]>0){ UIView* subView = [windowViews objectAtIndex:[windowViews count]-1]; for(UIView* aSubView in subView.subviews) { [aSubView.layer removeAllAnimations]; } [subView addSubview:self]; } } - (void)showBackground { _bgView.alpha = 0; [UIView beginAnimations:@"fadeIn" context:nil]; [UIView setAnimationDuration:0.35]; _bgView.alpha = 0.6; [UIView commitAnimations]; } -(void) showAlertAnmation { CAKeyframeAnimation * animation; animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; animation.duration = 0.30; animation.removedOnCompletion = YES; animation.fillMode = kCAFillModeForwards; NSMutableArray *values = [NSMutableArray array]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 1.0)]]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.1, 1.1, 1.0)]]; [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]]; animation.values = values; [_alertView.layer addAnimation:animation forKey:nil]; } -(void) hideAlertAnmation { [UIView beginAnimations:@"fadeIn" context:nil]; [UIView setAnimationDuration:0.35]; _bgView.alpha = 0.0; [UIView commitAnimations]; } -(CGRect)getAlertBounds { CGRect retRect; if (_alertViewType == CustomAlertViewType_JalBreakBuy_Login) { retRect= CGRectMake((self.frame.size.width-300)/2, (self.frame.size.height-200)/2, 300, 220); } else { UIImage* image=[UIImage imageNamed:@"AlertView_background.png"]; CGSize imageSize = image.size; retRect= CGRectMake((self.frame.size.width-imageSize.width)/2, (self.frame.size.height-imageSize.height)/2, imageSize.width, imageSize.height); } return retRect; } - (void) hideAlertView { _alertView.hidden = YES; [self hideAlertAnmation]; [self performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.2]; } -(void) removeFromSuperview { [super removeFromSuperview]; } - (void) leftBtnPressed:(id)sender { if (_customDelegate && [_customDelegate respondsToSelector:@selector(leftBtnPressedWithinalertView:)]) { [_customDelegate leftBtnPressedWithinalertView:self]; } else { [self hideAlertView]; } } - (void) rightBtnPressed:(id)sender { if (_customDelegate && [_customDelegate respondsToSelector:@selector(rightBtnPressedWithinalertView:)]) { [_customDelegate rightBtnPressedWithinalertView:self]; } else { [self hideAlertView]; } } - (void) centerBtnPressed:(id)sender { if (_customDelegate && [_customDelegate respondsToSelector:@selector(centerBtnPressedWithinalertView:)]) { [_customDelegate centerBtnPressedWithinalertView:self]; } else { [self hideAlertView]; } } -(void) setTitle:(NSString*) title { titleLabel.text = title; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self endEditing:YES]; } -(void) textFieldChanged { if ([textField.text length] > MAX_CATEGORY_NAME_LENGTH) { textField.text = [textField.text substringToIndex:MAX_CATEGORY_NAME_LENGTH]; } } #pragma mark - DelegateTextField - (BOOL)textFieldShouldReturn:(UITextField *)_textField { if (_textField.tag == kTagViewTextFieldJalBreakPassW) { [self rightBtnPressed:nil]; return NO; } return YES; } - (BOOL)textField:(UITextField *)textField_ shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField_.tag == kTagViewTextFieldJalBreakPassW) { if (string && [string length] && [textField_.text length]>15) { return NO; } } return YES; } @end
调用:
CustomAlertView* alert = [[CustomAlertView alloc]initWithTitle:nil msg:@"测试alertview" centerBtnTitle:@"确定"]; [alert show]; [alert release];