美文网首页iOS接下来要研究的知识点
在UIView上调用UIAlertController

在UIView上调用UIAlertController

作者: 辛乐 | 来源:发表于2016-09-22 23:40 被阅读1528次

    随着UIAlerView的废弃,UIAlertController的使用是势在必行了,我在这里就不再说明UIAlertController的具体用法了,自行百度,资料很多,我这里详细说明一下我具体遇到的问题,就是我想在一个展示在window上边的一个UIView上边使用弹窗,大家都知道,原来的UIAlertView是加载在window上边的,也就是展示在图层的最上边,这时候是没有问题的,但是换成UIAlertController之后,是需要控制器模态弹出,这时候如果当前控制器上边已经存在一个自定义边框透明的view,这时候就有问题了,如图:

    1.png

    很明显是在当前view的下边.因为UIAlertController必须是使用控制器模态弹出,这时候灵感来了,

    TestView *testView = [[TestView alloc] initWithFrame:self.view.bounds];
    //关键就在这里,把这里的view赋值给一个vc的view,就是一个思路的变通
    UIViewController *vc = [[UIViewController alloc] init];
    //[vc.view addSubview:testView];//有兴趣的同学可以看看这里view赋值替换和增加子视图的区别
    vc.view = testView;

    // 最终用这个vc显示alertController:presentViewController
    [vc presentViewController:wAlert animated:YES completion:nil];
    上代码

    AppDelegate *delegate =(id)[UIApplication sharedApplication].delegate;
            TestView *testView = [[TestView alloc] initWithFrame:self.view.bounds];
           //关键就在这里,把这里的view赋值给一个vc的view,就是一个思路的变通
            UIViewController *vc = [[UIViewController alloc] init];
            //[vc.view addSubview:testView];//有兴趣的同学可以看看这里view赋值替换和增加子视图的区别
            vc.view = testView;
            
            testView.btnBlock = ^(){
                
                // 1.实例化alert:alertControllerWithTitle
                UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"测试" message:@"UIAlertController" preferredStyle:UIAlertControllerStyleAlert];
                
                // 2.实例化按钮:actionWithTitle
                // 为防止block与控制器间循环引用,我们这里需用__weak来预防
                __weak typeof(alert) wAlert = alert;
                [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
                    // 点击确定按钮的时候, 会调用这个block
                    NSLog(@"确定~~");
                    
                }]];
                
                [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                    
                }]];
                
                
                // 3.显示alertController:presentViewController
                [vc presentViewController:wAlert animated:YES completion:nil];
                
            };
            
            [delegate.window addSubview:vc.view];
    
    

    来,看一下效果,如下图:

    2.png

    另外附:获取空间相对屏幕的位置

    UIWindow * window=[[[UIApplication sharedApplication] delegate] window];
        CGRect rect=[label1 convertRect: label1.bounds toView:window];
    

    有分享才有进步,集大家之所长,总结自己的经验,利己利人~~

    相关文章

      网友评论

        本文标题:在UIView上调用UIAlertController

        本文链接:https://www.haomeiwen.com/subject/wuftyttx.html