升级到ios7后,旧项目中使用的继承UIAlertView的自定义alertview无法正常显示了,无奈只好换思路去实现,改成从当前keywindow下创建要显示的alertview,并模仿了系统alertview
.h文件
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
#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
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
.m文件
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
#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
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
调用:
CustomAlertView* alert = [[CustomAlertView alloc]initWithTitle:nil
msg:@"测试alertview"
centerBtnTitle:@"确定"];
[alert show];
[alert release];