国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 系統 > 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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
在线午夜影院| 国产情侣高潮对白| 久热免费在线视频| 蜜桃av在线免费观看| 国产免费黄视频在线观看| 国产原创在线播放| 国产三级自拍| 在线观看wwww| 九色视频网站| 国产高清一级片| heisi视频网在线观看| 日本一本久久| 国产偷窥老熟盗摄视频| 97一区二区三区| 交视频在线观看国产| 国产粉嫩一区二区三区在线观看| 在线观看av的网站| www在线视频观看| 国产免费人人看| 国产福利在线播放| 四虎成人欧美精品在永久在线| 青青草免费观看免费视频在线| 国产69精品久久app免费版| 国产网友自拍视频导航网站在线观看| 在线视频观看你懂的| 欧美日韩在线视频免费观看 | www.色婷婷| 国产天堂av| 黄网址在线播放免费| 中文资源在线网| 高清视频一区二区三区四区| 国产高清av在线| 国产毛片在线看| 性欧美精品xxxx| 精品国产丝袜高跟鞋| 国产精品久久久久一区二区国产 | 日本高清不卡中文字幕| 国产视频你懂的| 午夜视频在线| 国产在线激情视频| 人人干人人插| 色吊丝av中文字幕| 一级二级在线观看| 国产精品伦理一区二区三区| 中文字幕色视频| 成年网在线观看免费观看网址| 天天草天天草| 开心婷婷激情| 欧美黑人乱大交| 牛牛热在线视频| 亚洲xxxxxx| 亚洲字幕成人中文在线观看| 91亚洲精选| 国产成a人亚洲精v品| 中文天堂av| 人人干人人插| 国产乱子伦三级在线播放| 中文字幕日本在线观看| 国产男女av| 国产黄色片在线观看| aaa大片在线观看| 亚洲国产精华液| 好吊日视频在线观看| 中文字幕在线免费看| 国产激情视频网址| 亚洲成a人v欧美综合天堂麻豆| www.91在线播放| 国产一二三区在线视频| 91青青在线视频| 成人av小说网| 9色在线视频网站| 激情亚洲综合网| 国产福利在线播放| 青青草中文字幕| 国产亚洲精品午夜高清影院| 亚洲视频手机在线观看| 成 人免费视频播放| 国产高清在线看| 九九热免费在线视频| 国产不卡在线| 成在在线免费视频| 在线观看免费高清完整| 最新超碰在线| 久草网在线视频| 一本大道五月香蕉| 国产精品777一区二区| 国产主播福利在线| xxxxx中文字幕| av丝袜在线| 国产高潮又爽又无遮挡又免费| 黄色一级片视频| www.jizz在线观看| 91www在线观看| 国产一级电影网| 免费黄网站在线观看| 精品福利视频导航大全| 国产精品视频一区二区图片| 国产字幕在线看| 女同一区二区免费aⅴ| 中文一区在线观看| 国产高清在线视频| 国产精品久久久久永久免费看| 九九视频九九热| 思思99精品视频在线观看| √天堂中文在线| 国产在线免费观看| 国产美女一区视频| 国产在线色视频| 国产理论电影在线| 久草视频国产| **三级三级97片毛片| 18加网站在线| 国产福利免费在线观看| 99热99re6国产在线播放| 一区二区三区四区在线免费视频| 97视频网站| 欧美激情福利视频在线观看免费| 久久国产综合视频| 国产网红在线| 国产精品久久在线| 亚洲精品一区中文字幕电影| 日本成人a视频| 国产精品亚洲第五区在线| 国产欧美日韩专区| 影音先锋日韩| 国产专区在线播放| 精品视频三区| 国产乱视频在线观看播放| 国产叼嘿网站免费观看不用充会员| 国产不卡在线| 麻豆国产视频| 国产黄色免费看| 豆国产97在线|亚洲| 2021av在线| www.香蕉视频在线观看| 国产精品久久久精品a级小说| 精品偷拍激情视频在线观看| 久久精品国产亚洲a∨麻豆| av网站在线播放| 中文字幕在线视频观看| 在线免费看黄| 中文字幕一区免费| 青青草在线视频免费观看| 国产精品区一区二| 国产麻豆免费| 免费观看久久久久| 91美女在线| 最近免费中文字幕在线第一页| 伊人网在线视频| 激情视频国产| 啪啪免费视频一区| 在线观看视频污| 国产极品一区二区三区 | a视频免费看| 在线视频99| 国产高清在线看| 国产日本视频| 国产午夜精品久久久久免费视| 超碰免费在线| 大香伊人久久| 国产免费a∨片在线观看不卡| 亚洲人av在线| 四虎网站在线观看| 亚洲成a人v欧美综合天堂麻豆| 国产激情自拍视频| 国产黄色av免费看| 精品一区二区三区在线观看l| 最近中文字幕mv免费高清电影| 国产农村一级特黄α**毛片| 久久五月精品中文字幕 | 国产人成在线视频| 国产一卡2卡3卡免费网站| 国产一区二区影视| 国产精品入口麻豆高清| 国产一级片麻豆| 国产午夜视频在线观看| 国产欧美日韩精品综合| 91av福利| 快射av在线播放一区| 国产男女猛烈无遮挡免费视频| 天堂在线免费av| ·天天天天操| 青青在线视频| 国产丝袜在线| 亚洲欧美综合乱码精品成人网| 日本免费黄色| 国产一级免费黄色片| 在线观看的网站你懂的| 免费精品国产自产拍在| 五月天天在线| 天天插天天狠天天透| 国产裸舞福利在线视频合集| 精品视频一区二区观看| 国产在线超碰| 在线观看av网站永久| 五月亚洲综合| 亚洲成年人视频| 国产黄色免费看| 成在在线免费视频| 亚洲天堂视频在线观看免费|