亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中你需要的彈窗效果總結大全

2019-10-21 18:39:37
字體:
來源:轉載
供稿:網友

前言

彈框是人機交互中常見的方式,常常出現于詢問、警示以及完成某個插入任務,常見于網頁端及移動端。彈框能使用戶有效聚焦于當前最緊急的信息,也可以在不用離開當前頁面的前提下,完成一些輕量的任務。

在我們的實際開發項目中,彈窗是必不可少的,很多時候我們用的是系統的AlertViewController,但是實際情況中,并不能滿足我們的開發需求,這個時候我們需要的就是自定義自己的彈窗效果。接下來我會寫一些自己的所封裝的彈窗效果。包括代理delegate回調,block 回調,xib新建view來創建我們需要的彈窗效果。

下面話不多說了,來一起看看詳細的介紹吧

官方思路

1.在我們自己動手之前一定要先看看官方是怎么封裝的,這樣我們寫出來的代碼才接近蘋果語言,看起來高大上。好的代碼一定是見名知意的,別人一看這個方法就知道大概我們通過這個方法可以得到什么樣的效果。

// ios8.0 之后UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"message" preferredStyle:UIAlertControllerStyleAlert];UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {NSLog(@"確定");}];[alertController addAction:cancelAction];[alertController addAction:okAction];[self presentViewController:alertController animated:YES completion:nil];// ios8.0 之前UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Tittle" message:@"This is message" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil];[alertView show];

因為在代碼量風格上,我還是比較喜歡老版本的彈窗,畢竟代碼上啊,一句話調用美滋滋。所以接下來我們封裝也是模仿官方開始.....

delegate

我們可以看到在蘋果官方中,我們需要通過識別用戶點擊某個按鈕來確定需要進一步的操作事件,這個時候是通過代理來實現的。代理的話,我們在熟悉不過了。

1、首先申明協議

#pragma mark - 協議@class HLAlertView;@protocol HLAlertViewDelegate<NSObject>- (void)alertViewDidClickButtonWithIndex:(NSInteger)index;@end

2、在viewController中遵循代理,設置代理 , 實現方法即可

<HLAlertViewDelegate>self.delegate = self;#pragma mark --- HLAlertViewDelegate-(void)alertViewDidClickButtonWithIndex:(NSInteger)index{if (index == AlertSureButtonClick) {[self alertSureButtonClick];}else{[self alertCauseButtonClick];}}

3、接下來就是實現我們封裝類的.h文件方法申明,以及.m的實現方法

//.h 文件#import <UIKit/UIKit.h>typedef enum : NSUInteger {AlertCauseButtonClick = 0,AlertSureButtonClick} AlertButtonClickIndex;#pragma mark - 協議@class HLAlertView;@protocol HLAlertViewDelegate<NSObject>- (void)alertViewDidClickButtonWithIndex:(NSInteger)index;@end@interface HLAlertView : UIView@property(nonatomic, weak) id <HLAlertViewDelegate> delegate;- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message sureButton:(NSString *)sureBtn;- (void)show;@end
@interface HLAlertView()/** 彈窗主內容view */@property (nonatomic,strong) UIView *contentView;/** 彈窗標題 */@property (nonatomic,copy) NSString *title;/** message */@property (nonatomic,copy) NSString *message;/** 確認按鈕 */@property (nonatomic,copy) UIButton *sureButton;@end@implementation HLAlertView- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message sureButton:(NSString *)sureBtn{if (self = [super init]) {self.title = tittle;self.message = message;[self sutUpView];}return self;}- (void)sutUpView{self.frame = [UIScreen mainScreen].bounds;self.backgroundColor = [UIColor colorWithWhite:0.5 alpha:0.85];[UIView animateWithDuration:0.5 animations:^{self.alpha = 1;}];//------- 彈窗主內容 -------//self.contentView = [[UIView alloc]init];self.contentView.frame = CGRectMake(0, 0, SCREEN_WIDTH - 80, 150);self.contentView.center = self.center;self.contentView.backgroundColor = [UIColor whiteColor];self.contentView.layer.cornerRadius = 6;[self addSubview:self.contentView];// 標題UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 10, self.contentView.width, 22)];titleLabel.font = [UIFont boldSystemFontOfSize:20];titleLabel.textAlignment = NSTextAlignmentCenter;titleLabel.text = self.title;[self.contentView addSubview:titleLabel];// messageUILabel *messageLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 50, self.contentView.width, 22)];messageLable.font = [UIFont boldSystemFontOfSize:17];messageLable.textAlignment = NSTextAlignmentCenter;messageLable.text = self.message;[self.contentView addSubview:messageLable];// 取消按鈕UIButton * causeBtn = [UIButton buttonWithType:UIButtonTypeCustom];causeBtn.frame = CGRectMake(0, self.contentView.height - 40, self.contentView.width/2, 40);causeBtn.backgroundColor = [UIColor grayColor];[causeBtn setTitle:@"取消" forState:UIControlStateNormal];[causeBtn addTarget:self action:@selector(causeBtn:) forControlEvents:UIControlEventTouchUpInside];[self.contentView addSubview:causeBtn];// 確認按鈕UIButton * sureButton = [UIButton buttonWithType:UIButtonTypeCustom];sureButton.frame = CGRectMake(causeBtn.width, causeBtn.y, causeBtn.width, 40);sureButton.backgroundColor = [UIColor redColor];[sureButton setTitle:@"確定" forState:UIControlStateNormal];[sureButton addTarget:self action:@selector(processSure:) forControlEvents:UIControlEventTouchUpInside];[self.contentView addSubview:sureButton];}- (void)show{UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;[keyWindow addSubview:self];}- (void)processSure:(UIButton *)sender{if ([self.delegate respondsToSelector:@selector(alertViewDidClickButtonWithIndex:)]) {[self.delegate alertViewDidClickButtonWithIndex:AlertSureButtonClick];}[self dismiss];}- (void)causeBtn:(UIButton *)sender{if ([self.delegate respondsToSelector:@selector(alertViewDidClickButtonWithIndex:)]) {[self.delegate alertViewDidClickButtonWithIndex:AlertCauseButtonClick];}[self dismiss];}#pragma mark - 移除此彈窗/** 移除此彈窗 */- (void)dismiss{[self removeFromSuperview];}

通過代理的方式我們就完成了我們自己頁面的封裝了。

block彈窗

先看一下封裝之后我們的調用方式吧:

HLAlertViewBlock * alertView = [[HLAlertViewBlock alloc] initWithTittle:@"提示" message:@"通過Block彈窗回調的彈窗" block:^(NSInteger index) {if (index == AlertSureButtonClick) {[self alertSureButtonClick];}else{[self alertCauseButtonClick];}}];[alertView show];

相比代理的方式的話,我們還行喜歡這種block回調的,簡大氣接地氣啊。當然在我們需要處理邏輯多的時候,還是代理會比較好一點,具體環境下具體使用。

封裝成block的好處就是在我們構造方法的時候就可以實現我們將來的點擊方法,所以在自定義彈窗類的.h文件中,我們要申明block屬性。代碼

//.h@interface HLAlertViewBlock : UIView@property(nonatomic, copy) void (^buttonBlock) (NSInteger index);- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message block:(void (^) (NSInteger index))block;- (void)show;@end
//.m@interface HLAlertViewBlock()/** 彈窗主內容view */@property (nonatomic,strong) UIView *contentView;/** 彈窗標題 */@property (nonatomic,copy) NSString *title;/** message */@property (nonatomic,copy) NSString *message;/** 確認按鈕 */@property (nonatomic,copy) UIButton *sureButton;@end@implementation HLAlertViewBlock- (instancetype)initWithTittle:(NSString *)tittle message:(NSString *)message block:(void (^)(NSInteger))block{if (self = [super init]) {self.title = tittle;self.message = message;self.buttonBlock = block;[self sutUpView];}return self;}

到此為止,我們的block彈窗申明方法也搞定了。

xib的封裝彈窗

iOS,彈窗

好處就是不用寫界面代碼了。

殊途同歸

還有一種實現彈窗效果的方法,不通過新建view而是Controller來實現的,就是新建一個透明的控制器。代碼如下

PopViewController * popVC = [[PopViewController alloc] init];UIColor * color = [UIColor blackColor];popVC.view.backgroundColor = [color colorWithAlphaComponent:0.85];popVC.modalPresentationStyle = UIModalPresentationOverCurrentContext;[self presentViewController:popVC animated:NO completion:nil];

更加簡單,邏輯也更加好處理一些。

最后附上demo地址:gibHub地址:https://github.com/MrBMask

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品福利视频导航| 欧美性猛交xxxx乱大交极品| 久久久国产一区二区三区| 九九精品视频在线| 91亚洲一区精品| 亚洲精品福利资源站| 亚洲国产精品高清久久久| 日韩精品在线免费播放| 亚洲aaaaaa| 中文字幕欧美在线| 91精品国产91| 久久99久久亚洲国产| 欧美日韩亚洲一区二| 九九九久久国产免费| 国产精品入口夜色视频大尺度| 欧美猛交ⅹxxx乱大交视频| 欧美激情久久久久| 久久青草福利网站| 亚洲精品免费在线视频| 奇门遁甲1982国语版免费观看高清| 亚洲精品一区中文字幕乱码| 8090成年在线看片午夜| 精品国偷自产在线视频| 久久久噜久噜久久综合| 不卡av在线播放| 亚洲网站在线看| 国产精品色悠悠| 大量国产精品视频| 欧美日韩国产综合新一区| 欧美激情视频一区二区| 国产精品丝袜一区二区三区| 国产成+人+综合+亚洲欧美丁香花| 久久91亚洲精品中文字幕奶水| 精品日韩美女的视频高清| 亚洲欧洲美洲在线综合| 久久这里只有精品视频首页| 国产丝袜视频一区| 久久夜色精品国产亚洲aⅴ| 欧美在线精品免播放器视频| 亚洲天堂av在线免费观看| 国产精品激情av电影在线观看| 久久91亚洲精品中文字幕| 亚洲奶大毛多的老太婆| 最近2019年手机中文字幕| 欧美黑人巨大精品一区二区| 国产成人精品久久二区二区| 最近2019中文字幕大全第二页| 国产精品高潮粉嫩av| 国产精品一区专区欧美日韩| 国产精品高清网站| 尤物tv国产一区| 亚洲精品久久久久久久久| 国产精品三级久久久久久电影| 久久久久久国产精品久久| 亚洲二区在线播放视频| 欧美野外猛男的大粗鳮| 国产精品美女久久久久av超清| 欧美一级淫片播放口| 成人性生交大片免费看视频直播| 欧美在线视频导航| 欧美激情成人在线视频| 91精品久久久久| 国产欧美精品va在线观看| 国产精品视频男人的天堂| 午夜精品久久久久久99热| 亲子乱一区二区三区电影| 亚洲国产精品资源| 欧美裸体xxxx极品少妇软件| 久久免费观看视频| 精品性高朝久久久久久久| 国产精品视频成人| 亚洲欧美国产精品久久久久久久| 日韩在线视频观看正片免费网站| 亚洲欧洲在线观看| 中文字幕精品一区二区精品| 国产精品欧美激情在线播放| 亚洲男人天堂2024| 亚洲xxx大片| 亚洲欧美日韩精品久久亚洲区| 国内精品视频在线| 性色av香蕉一区二区| 亚洲另类图片色| 日韩亚洲精品视频| 国内精品久久久久久| 欧美亚洲国产视频小说| 2019中文字幕在线| 日本成人黄色片| 欧美成人精品一区二区三区| 97在线日本国产| 亚洲欧美国产一本综合首页| 亚洲精品成人免费| 欧美日韩国产中文精品字幕自在自线| www.久久久久久.com| 亚洲片av在线| 欧美专区国产专区| 97超碰国产精品女人人人爽| 91精品国产沙发| 91干在线观看| 国产三级精品网站| 久久色免费在线视频| 亚洲综合社区网| 中文国产亚洲喷潮| 亚洲人成啪啪网站| 成人激情av在线| 亚洲精品国产成人| 日韩av大片在线| 欧美人成在线视频| 国产精品视频yy9099| 成人久久精品视频| 中文字幕九色91在线| 精品国产一区二区三区久久| 亚洲另类激情图| 在线激情影院一区| 欧美国产精品va在线观看| 精品日韩视频在线观看| 国产精品国模在线| 国产成人精品在线观看| 国内精品久久久| 国产在线视频不卡| 在线日韩精品视频| 78色国产精品| 久久久精品视频成人| 亚洲欧洲美洲在线综合| 久久久伊人欧美| 精品亚洲永久免费精品| 黑人巨大精品欧美一区二区三区| 国产精品久久久久久久久久久久久久| 久久久999精品视频| 精品久久久国产精品999| 在线视频中文亚洲| 国产经典一区二区| 久久久成人精品视频| 成人av电影天堂| 国产美女高潮久久白浆| 欧美日本亚洲视频| 亚洲免费视频观看| 欧美日韩国产区| 久久精品国产欧美亚洲人人爽| 国产福利视频一区| 久久亚洲电影天堂| 日韩国产欧美精品一区二区三区| 久久精品电影一区二区| 中文字幕欧美精品在线| 国产成人精品日本亚洲专区61| 亚洲国产天堂久久国产91| www.欧美三级电影.com| 欧美孕妇毛茸茸xxxx| 日韩欧美中文字幕在线观看| 欧美最顶级丰满的aⅴ艳星| 久久久久久久久网站| 91精品国产沙发| 欧美另类xxx| 久久成人18免费网站| 日本一区二区不卡| 成人av番号网| 91精品国产综合久久久久久蜜臀| 国产精品免费久久久久影院| 97在线免费观看视频| 国产狼人综合免费视频| 日韩亚洲国产中文字幕| 久久久久久久久电影| 亚洲午夜精品久久久久久性色| 成人黄色av播放免费| 国内外成人免费激情在线视频|