专栏首页freesan44ios实战-runloop实现的同步弹窗

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

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

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

KSPopupView *popup = [[KSPopupView alloc] init];

NSIntegerbuttonIndex = [popup doModal];

NSLog(@"选择了%ld", (long)buttonIndex);

@implementationKSPopupView{BOOL_bModel;NSInteger_selectBtnIndex;

}

- (NSInteger)doModal {

[selfperformSelector:@selector(showAlert)];

_bModel =YES;while(_bModel) {

[[NSRunLoopmainRunLoop] runMode:NSDefaultRunLoopModebeforeDate:[NSDatedistantFuture]];

}return_selectBtnIndex;

}

- (void)showAlert {UIView*view = [[UIViewalloc] initWithFrame:CGRectMake(20,100,200,100)];

[view setBackgroundColor:[UIColorredColor]];UIButton*button = [[UIButtonalloc] initWithFrame:CGRectMake(0,0,50,30)];

[button setTitle:@"ok"forState:UIControlStateNormal];

[button setBackgroundColor:[UIColorgreenColor]];

[button addTarget:selfaction:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];

[view addSubview:button];

[[UIApplicationsharedApplication].keyWindow addSubview:view];

}

- (void)buttonClick:(UIButton*)button {

[button.superview removeFromSuperview];

_selectBtnIndex =1;

_bModel =NO;

}

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

- (NSInteger)doModal {

[selfshowAlert];

_bModel =YES;while(_bModel) {

[[NSRunLoopmainRunLoop] runMode:NSDefaultRunLoopModebeforeDate:[NSDatedistantFuture]];

}return_selectBtnIndex;

}

- (void)showAlert {UIAlertView*alertView = [[UIAlertViewalloc] initWithTitle:@""message:@"okookoko"delegate:selfcancelButtonTitle:@"cancel"otherButtonTitles:@"ok",nil];

[alertView show];

}

- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

_selectBtnIndex = buttonIndex;

_bModel =NO;

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Command PhaseScriptExecution failed with a nonzero exit code问题解决

    参考链接:https://stackoverflow.com/questions/53289524/xcode-10-2-1-command-phasescri...

    freesan44
  • 实现 iOS 前台时的推送弹窗效果

    原文链接:http://www.jianshu.com/p/67864e1c2085

    freesan44
  • 实现 iOS 前台时的推送弹窗效果EBForeNotification

    或许很多童鞋还不知道,在 iOS 中收到推送通知时,如果 App 处于前台运行的情况下,推送的顶部弹窗是不会弹出来的。

    freesan44
  • 解析JS绑定事件重复触发问题 第二步

    此时我们分析上面这段代码这么写有什么问题。为什么会事件会累加执行?可以看出出第二次的事件绑定和第一次的事件绑定都注册到了同一个DIV身上,在JQ中事件注册同时注...

    互联网CEO
  • 只有程序员才会玩的游戏

    这是一个在线解谜游戏,画风简洁,部分关卡需要具备一定的web知识。url地址直接访问,打开浏览器调试等操作都是解谜必要的。对于web开发人员来说非常值得一玩。

    编程珠玑
  • Topsy如何预测美国大选和奥斯卡结果

    大数据文摘
  • Flutter基础widgets教程-Baseline篇

    青年码农
  • 学习Storm、Spark Streaming流式实时分布式计算系统的设计要点

    阅读导读: 1.流式实时分布式计算系统有哪些共同特征,产生的背景是什么? 2.原语设计的有哪些要点? 3.元语设计中Spark、storm是如何设计的? 4.S...

    用户1410343
  • Flutter基础widgets教程-Baseline篇

    青年码农
  • 响铃:战略领投网易云音乐后,百度的内容生态站上新高点

    10月12日,百度宣布战略领投网易云音乐新一轮融资,其他投资方包括泛大西洋投资集团(General Atlantic)、博裕资本等,其中,百度与网易云音乐同时宣...

    曾响铃

扫码关注云+社区

领取腾讯云代金券