这个是和UIAlertView类似,但是可以自定义view的样式废话不多说,上代码:

首先第一步:创建一个继承自View的类如:

#import <UIKit/UIKit.h>

@class <#你自己的类名#>;

@protocol PopupViewDelegate <NSObject>

- (void)popupView:(<#你自己的类名#>*)popupView ClickedButtonAtIndex:(NSInteger)buttonIndex;

@end

@interface <#你自己的类名#> : UIView

/**初始化View

* title   * 提示内容

* message * 需要显示的内容

* cancelButtonTitle *取消按钮的文字

* okButtonTitles *确认按钮的文字

* delegate  * 当前代理者

*/

- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitles:(NSString *)okButtonTitles delegate:(id)delegate;

/**弹出该View*/

- (void)show;

@property (nonatomic,strong)id <PopupViewDelegate>  delegate;

@end

/**上方的方法直接贴到View的.h文件中就好,当然类名需要更改的*/

//屏幕宽度

#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

//获得屏幕高度

#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)

#define kNoButtonW 120

#define kNoButtonH 35

#define kButtonRadius 15

#define kFontNameStrBold @"Helvetica-Bold"

#define kFontNameStrRegular @"Helvetica"

#import " <#你自己的类名#>"

@interface  <#你自己的类名#>()

/**中间黑色的View*/

@property (nonatomic,strong)UIView * blackeView;

/**提示框的Lable*/

@property (nonatomic,strong)UILabel * titleLable;

/**描述内容的Lable*/

@property (nonatomic,strong)UILabel * desLabel;

/**取消或者NO的button*/

@property (nonatomic,strong)UIButton * noButton;

/**YES或者OK的button*/

@property (nonatomic,strong)UIButton * yesButton;

@end

@implementation  <#你自己的类名#>

- (instancetype)initWithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitles:(NSString *)okButtonTitles delegate:(id)delegate

{

if (self = [super init]) {

self.frame = CGRectMake(0, 0,SCREEN_WIDTH, SCREEN_HEIGHT);

self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];

/**设置弹出View的动画*/

[self setupWithBlackView];

/**往黑色View中添加子控件*/

[self setupWithAddControls];

self.titleLable.text = title;

self.desLabel.text = message;

self.delegate = delegate;

[self.noButton setTitle:cancelButtonTitle forState:UIControlStateNormal];

[self.yesButton setTitle:okButtonTitles forState:UIControlStateNormal];

}

return self;

}

/**设置添加黑色View的动画*/

-(void)setupWithBlackView

{

UIView * blackView =[[UIView alloc]init];

blackView.layer.cornerRadius = 10;

blackView.layer.masksToBounds = YES;

self.blackeView = blackView;

blackView.backgroundColor = [UIColor colorWithRed:31/255.0 green:31/255.0 blue:31/255.0 alpha:1];

[self addSubview:blackView];

}

/**往黑色View中添加子控件*/

-(void)setupWithAddControls

{

/**标题文本*/

UILabel * titleLable = [[UILabel alloc]init];

titleLable.numberOfLines = 0;

titleLable.textAlignment = NSTextAlignmentCenter;

//    titleLable.backgroundColor = [UIColor redColor];

titleLable.font = [UIFont fontWithName:kFontNameStrBold size:22];

titleLable.textColor = [UIColor whiteColor];

self.titleLable = titleLable;

[self.blackeView addSubview:titleLable];

/**内容的文本*/

UILabel * descLable = [[UILabel alloc]init];

self.desLabel = descLable;

descLable.numberOfLines = 0;

descLable.textAlignment = NSTextAlignmentCenter;

//    descLable.backgroundColor = [UIColor orangeColor];

descLable.font = [UIFont fontWithName:kFontNameStrRegular size:15];

descLable.textColor = [UIColor whiteColor];

[self.blackeView addSubview:descLable];

/**确认按钮的添加*/

UIButton * yesButton = [[UIButton alloc]init];

yesButton.tag = 2;

[yesButton addTarget:self action:@selector(yesOrNOButtonClcik:) forControlEvents:UIControlEventTouchUpInside];

self.yesButton  = yesButton;

[yesButton setBackgroundColor:[UIColor colorWithRed:25/255.0 green:164/255.0 blue:58/255.0 alpha:1]];

yesButton.titleLabel.font = [UIFont fontWithName:kFontNameStrBold size:17];

[yesButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

yesButton.layer.cornerRadius = kButtonRadius;

yesButton.layer.masksToBounds = YES;

[self.blackeView addSubview:yesButton];

/**取消按钮的添加*/

UIButton * noButton =[[UIButton alloc]init];

noButton.tag = 1;

[noButton addTarget:self action:@selector(yesOrNOButtonClcik:) forControlEvents:UIControlEventTouchUpInside];

[noButton setBackgroundColor:[UIColor colorWithRed:38/255.0 green:38/255.0 blue:38/255.0 alpha:1]];

NSString * buttonstr = [NSString stringWithFormat:@"%@",noButton.titleLabel.text];

NSInteger buttonLength =buttonstr.length;

if (5< buttonLength) {

noButton.titleLabel.font = [UIFont fontWithName:kFontNameStrBold size:15];

yesButton.titleLabel.font= [UIFont fontWithName:kFontNameStrBold size:15];

}else{

noButton.titleLabel.font = [UIFont fontWithName:kFontNameStrBold size:17];

}

[noButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

noButton.layer.cornerRadius = kButtonRadius;

noButton.layer.masksToBounds = YES;

self.noButton = noButton;

[self.blackeView addSubview:noButton];

}

-(void)layoutSubviews

{

//设置黑色View的frame

self.blackeView.frame =CGRectMake(0, 0, self.bounds.size.width/1.2, 170);

self.blackeView.center = CGPointMake(self.center.x, self.center.y);

//设置titleLable的frame

NSString * titlestr = [NSString stringWithFormat:@"%@",self.titleLable.text];

NSInteger titlerlength =titlestr.length;

if (30<titlerlength) {

self.titleLable.frame = CGRectMake(10,0,self.blackeView.bounds.size.width/1.07 ,60);

}else{

self.titleLable.frame = CGRectMake(10, 10,self.blackeView.bounds.size.width/1.07 ,40);

}

//设置内容的lable

self.desLabel.frame = CGRectMake(10,CGRectGetMaxY(self.titleLable.bounds),self.blackeView.bounds.size.width/1.07, 50);

//设置NO的按钮frame

CGFloat nobtnH = kNoButtonH;

CGFloat nobtnW = kNoButtonW;

self.noButton.frame = CGRectMake(10, CGRectGetMaxY(self.blackeView.bounds)-nobtnH-15, nobtnW, nobtnH);

//设置YES的按钮frame

self.yesButton.frame = CGRectMake(CGRectGetMaxX(self.blackeView.bounds)-nobtnW -10, CGRectGetMaxY(self.blackeView.bounds)-nobtnH-15 ,self.noButton.bounds.size.width, self.noButton.bounds.size.height);

/**根据判断来设置frame*/

[self stupOrEmpty];

}

-(void)stupOrEmpty

{

if ([self.noButton.titleLabel.text isEqualToString:@""] ||self.noButton.titleLabel.text ==nil)

{//如果No按钮没有文字则只显示YES按钮

self.noButton.hidden = YES;

self.yesButton.frame = CGRectMake(0,0, kNoButtonW +30, kNoButtonH);

self.yesButton.center = CGPointMake(self.blackeView.bounds.size.width/2, CGRectGetMaxY(self.blackeView.bounds)-kNoButtonH);

}else if ([self.yesButton.titleLabel.text isEqualToString:@""]|| self.yesButton.titleLabel.text == nil)

{//如果YES按钮没有文字则只显示NO按钮

self.yesButton.hidden = YES;

self.noButton.frame = CGRectMake(0, 0, kNoButtonW+30, kNoButtonH);

self.noButton.center = CGPointMake(self.blackeView.bounds.size.width/2, CGRectGetMaxY(self.blackeView.bounds)-kNoButtonH);

[self.noButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

[self.noButton setBackgroundColor:[UIColor colorWithRed:25/255.0 green:164/255.0 blue:58/255.0 alpha:1]];

}

//判断文本是否有内容

if([self.titleLable.text isEqualToString:@""]||self.titleLable.text ==nil)

{

self.desLabel.font = [UIFont fontWithName:kFontNameStrBold size:20];

self.desLabel.frame = CGRectMake(10,CGRectGetMaxY(self.titleLable.bounds)-20,self.blackeView.bounds.size.width/1.07, 90);

self.titleLable.hidden = YES;

}

}

-(void)yesOrNOButtonClcik:(UIButton*)buttonTag

{

if ([self.delegate respondsToSelector:@selector(popupView:ClickedButtonAtIndex:)]) {

[self.delegate popupView:self ClickedButtonAtIndex:buttonTag.tag];

}

[self removeSelf];

}

- (void)removeSelf

{

[UIView animateWithDuration:0.38 animations:^{

self.alpha = 0;

}completion:^(BOOL finished) {

[self removeFromSuperview];

}];

}

- (void)show

{

UIWindow *window = [UIApplication sharedApplication].keyWindow;

[window addSubview:self];

self.alpha = 0;

self.blackeView.transform = CGAffineTransformMakeScale(1.08, 1.08);

[UIView animateWithDuration:0.38 animations:^{

self.alpha = 1;

self.blackeView.transform = CGAffineTransformIdentity;

}];

}

@end

/**上面这个就是放在.m里面了*/

<PopupViewDelegate>

接下来你只需要在你要响应的点击事件里面去导入这个View的头文件和遵守它的代理实现代理方法就可以了

PopupView * popupV = [[PopupView alloc]initWithTitle:@"Are You?" message:@"你猜我我猜你猜我猜你猜我是谁!" cancelButtonTitle:@"Helvetica" okButtonTitles:@"OK" delegate:self];

[popupV show];

/**代理方法*/

- (void)popupView:(PopupView *)popupView ClickedButtonAtIndex:(NSInteger)buttonIndex{

if (popupView.tag == 1) {

NSLog(@"点击了取消按钮");

}else{

NSLog(@"点击了确认按钮");

}

}

好了一个自定义的弹出框就搞定了!

自定义一个类似UIAlertView的弹出框的更多相关文章

  1. vh属性-- 一个永远垂直居中的弹出框

    下面的demo,无论浏览器大小如何改变,滚动条是否滚动,弹出框永远水平垂直居中 <html> <head> <title></title> </h ...

  2. sweetalert : 一个比较好看的弹出框

    1.引入 <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"> </script& ...

  3. [Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面

    引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文 ...

  4. WINRAR评估版本弹出框消除

    网上有很多WINRAR评估版本,这些版本下载安装了之后总会有些广告弹出,让人很烦恼,现在教大家一个方法消除这些弹出框. 复制以下代码:    RAR registration data SeVeN U ...

  5. 原生Js封装的弹出框-弹出窗口-页面居中-多状态可选

    原生Js封装的弹出框-弹出窗口-页面居中-多状态可选   实现了一下功能: 1.title可自定义 可拖拽 2.width height可以自定义 3.背景遮罩和透明度可以自定义 4.可以自己编辑弹出 ...

  6. vue--vant组件库Dialog弹出框

    安装vant UI框架: cnpm install vant –-save-dev 导入组件-在main.js里: import Vant from 'vant'; import'vant/lib/v ...

  7. WindowsPhone模拟简易Toast弹出框

    Coding4Fun这个开源控件中有ToastPrompt这个弹出框组件,但是由于Coding4Fun太庞大,如果只用到ToastPrompt这个控件的话,整个引用不太值当的.于是自己写了一个差不多的 ...

  8. ASP.NET中的几种弹出框提示

    B/S不像C/S那样一个MessageBox就可以弹出提示框,不过可以通过js的“Alert”来弹出消息,或者通过一些变种的js方法.下面我给大家介绍几种,希望大家喜欢. 四种弹出框代码: prote ...

  9. js实现弹出框跟随鼠标移动

    又是新的一天网上冲浪,在bing的搜索页面下看到这样一个效果: 即弹出框随着鼠标的移动而移动.思路大概为: 调用onmousemove函数,将鼠标的当前位置赋予弹出框即可 //html <div ...

随机推荐

  1. 使用css让div半透明

    设置div的背景为半透明,下面有个不错示例,使用div+css来实现下,不会的朋友可以参考下 div{filter:alpha(Opacity=80);-moz-opacity:0.5;opacity ...

  2. 链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别

    链接属性rel='external'.rel='nofollow'.rel='external nofollow'三种写法的区别   大家应该都知道rel='nofllow'的作用,它是告诉搜索引擎, ...

  3. jquery cdn/////////////////zzz

    jquery-2.1.1 注:jquery-2.0以上版本不再支持IE 6/7/8)百度引用地址 (推荐目前最稳定的,不会出现延时打不开情况) 百度压缩版引用地址:<script src=&qu ...

  4. Android -- OkHttp的简单使用和封装

    1,昨天把okHttp仔细的看了一下,以前都是调用同事封装好了的网络框架,直接使用很容易,但自己封装却不是那么简单,还好,今天就来自我救赎一把,就和大家写写从最基础的OKHttp的简单get.post ...

  5. word record about IR target detecting and tracking

    1 is submerged in background clutter 淹没在背景杂波中 2 performe poorly for the dim small targets in sever c ...

  6. Openbox简单支持平铺

    使用和gnome shell同样的热键定义 rc.xml中 <keybind key="W-Up"> <action name="Maximize&qu ...

  7. Linq对XML的简单操作

    前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...

  8. unity3d 第三人称视角的人物移动以及相机控制

    何谓第三人称?就像这样: 用wasd控制人物移动,同时保持在相机的中心.用鼠标右键与滚轮控制相机的角度和距离. 先说一下人物的移动: 首先给作为主角的单位加上 Charactor Controller ...

  9. esponse.sendRedirect方式的转向与RequestDispatcher的forward方法的比较

    esponse.sendRedirect方式的转向与RequestDispatcher的forward方法的比较 JavaWeb开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户 ...

  10. 压测session优化

    每请求一次jsp页面,会产生一个session对象,并且这个对象30分钟后才过期.我们计算了下当时的QPS是5000,也就是说每秒钟产生5000个session对象.每分钟产生300K个对象,sess ...