在UIView上调用UIAlertController

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

在UIView上调用UIAlertController_第1张图片
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];

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

在UIView上调用UIAlertController_第2张图片
2.png

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

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

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

你可能感兴趣的:(在UIView上调用UIAlertController)