文档章节

ios实战-runloop实现的同步弹窗

余成海
 余成海
发布于 2015/05/07 11:54
字数 295
阅读 136
收藏 1

我们知道UIAlertView使用delegate返回数据实现的,使用麻烦,之前介绍过用Block实现的例子ios实战-使用Block的UIAlertView

今天介绍使用runloop实现,用return返回点击的结果的方式,首先看一下自定义弹窗的实现代码:

KSPopupView *popup = [[KSPopupView alloc] init];
NSInteger buttonIndex = [popup doModal];
NSLog(@"选择了%ld", (long)buttonIndex);
@implementation KSPopupView {
    BOOL _bModel;
    NSInteger _selectBtnIndex;
}

- (NSInteger)doModal {
    [self performSelector:@selector(showAlert)];
    
    _bModel = YES;
    while (_bModel) {
        [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }
    
    return _selectBtnIndex;
}

- (void)showAlert {
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 200, 100)];
    [view setBackgroundColor:[UIColor redColor]];
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
    [button setTitle:@"ok" forState:UIControlStateNormal];
    [button setBackgroundColor:[UIColor greenColor]];
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
    [view addSubview:button];
    [[UIApplication sharedApplication].keyWindow addSubview:view];
}

- (void)buttonClick:(UIButton *)button {
    [button.superview removeFromSuperview];
    _selectBtnIndex = 1;
    _bModel = NO;
}

ok,没有问题,假如你想使用系统自带的UIAlertView的话,也是一样的,只是不要在程序刚启动的时候调用,不然会无法弹出(原因暂时还不知道),下面是UIAlertView的例子:

- (NSInteger)doModal {
    [self showAlert];
    _bModel = YES;
    while (_bModel) {
        [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }
    
    return _selectBtnIndex;
}

- (void)showAlert {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"okookoko" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"ok", nil];
    [alertView show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    _selectBtnIndex = buttonIndex;
    _bModel = NO;
}


© 著作权归作者所有

余成海
粉丝 62
博文 57
码字总数 29577
作品 0
杭州
iOS工程师
私信 提问
iOS炫酷动画图案、多种选择器、网络测速、滑动卡片效果等源码

iOS精选源码 对网络进行测速(http://www.code4app.com/thread-31311-1-1.html) 自实现大标题,配合原生骨架屏demo(http://www.code4app.com/thread-31316-1-1.html) 简单方便的pickerVIew记录...

Android爱开源
2018/11/08
0
0
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
iOS传感器集锦、飞机大战、开发调试工具、强制更新、Swift仿QQ空间头部等源码

iOS精选源码 飞机大作战(http://www.code4app.com/thread-31130-1-1.html) MUPhotoPreview -简单易用的图片浏览器(http://www.code4app.com/thread-31133-1-1.html) LLDebugTool是一款针对开......

sunnyaigd
2018/10/10
0
0
经过阿里,百度一面,二面后,我总结了50道iOS面试题

前言: 金三银四已经过去,根据统计,很多人都会选择在三月四月跳槽,原因有很多,企业年后会有大量员工离职,员工觉得老公司待遇不怎么样?薪资不够高,想换个新环境等等原因,所以,三月四...

原来是泽镜啊
2018/05/04
0
0
iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码

iOS精选源码 如丝般顺滑的微信朋友圈(点赞,评论,图文混排表情,...(http://www.code4app.com/thread-8412-1-1.html) 动态菜单第三版本:动态项,自适应方向(http://www.code4app.com/thre...

Android爱开源
01/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何使用 rsync 备份 Linux 系统的一些介绍

备份一直是 Linux 世界的热门话题。回到 2017,David Both 为 Opensource.com 的读者在使用 rsync 备份 Linux 系统方面提了一些建议,在这年的更早时候,他发起了一项问卷调查询问大家,在 ...

xiangyunyan
45分钟前
1
0
二进制位操作

单片机,或者一些模块的设置操作,都是由一个字节数据来完成,每位各有定义。就需进行位操作来组合需要的数字结果。 以JavaScript为例,编写位操作。 我们期望得到这样一个二进制数:0101101...

format
59分钟前
4
0
聊聊中国的通信行业:从“七国八制”到“中华”脊梁

本期文章和大家一起来聊一聊我曾经从事过的通信行业吧。最近各方面信息的泛滥,包括和华为的同学聊天,自己确实也感慨颇多。想想我自己本科主修通信工程,研究生再修信息与通信工程,从本科开...

CodeSheep
今天
10
0
MDK:ARM M451M:exceed the range of code meory, continue to erase or not?

问题: 代码空间超限 几天前就遇到:exceed the range of code meory, continue to erase or not? 如下所示: 解决过程 开始以为中MDK软件的128KB限制,如是就不能生成HEX文件,应该链接时有提...

SamXIAO
今天
4
1
OSChina 周六乱弹 —— 因违反《中华人民共和国治安管理处罚法》第四十四条之规定

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :#今日歌曲推荐# 惊艳分享谷微的单曲《安守本份》(@网易云音乐) 《安守本份》- 谷微 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
735
15

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部