使用MBProgressHUD之三大问题

用了MBProgressHUD这么久,不知道大家是否跟我一样,总有碰到问题的时候,今天就来总结一下本人在使用MBProgressHUD过程中碰到的三大问题。

首先要知道的是MBProgressHUD继承自UIView,HUD其实是加在UIWindow之上显示的,至于加在哪个Window就要看回你的项目了(是的,有的时候应用不止一个Window)。

1、解决HUD在显示的时候无法与界面交互
联想:看到UIView,并且需要交互,不知道你的第一反应是不是想到UIView的这个属性:userInteractionEnabled。
分析:HUD在显示的时候无法与界面交互,就是因为在最上面的这一层(Window层上的HUD这个View层),响应了交互事件。
原因:UIView 的userInteractionEnabled属性,默认值为YES。(The default value of this property is YES.)
解决方法:

hud.userInteractionEnabled = NO;

2、改变HUD的显示位置
既然要改变HUD的显示位置,通常来说,就是改变其y坐标值。
HUD给我们提供了这么个setOffest属性方法(旧版使用的是yOffset属性)。

[hud setOffset:CGPointMake(0, ScreenHeight/2-80)]; //For bottom location.

3、解决键盘遮挡HUD显示
根据前文提到的,应用在弹出键盘的时候多了一个UIRemoteKeyboardWindow。我们可以通过代码来获取应用当前显示的Window都有哪些。

NSArray *windows = [UIApplication sharedApplication].windows;

可以看到,我这边的Window有下面这些:
在这里插入图片描述
既然要把HUD显示在键盘之上,那我们找到键盘Window,并把应用当前Window赋为键盘Window。
代码如下:

    for (id windowView in windows) {
        NSString *viewName = NSStringFromClass([windowView class]);
        if ([@"UIRemoteKeyboardWindow" isEqualToString:viewName]) {
            keyWindow = windowView;
            break;
        }
    }

最后把HUD加进去即可。

MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:keyWindow animated:YES];

【补充】隐藏HUD
首先获取到显示在当前屏幕上的Window

- (UIWindow *)currentWindow {
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    if (window.windowLevel != UIWindowLevelNormal) {
        NSArray *windowArray = [UIApplication sharedApplication].windows;
        for (UIWindow *tmpWindow in windowArray) {
            if (tmpWindow.windowLevel == UIWindowLevelNormal) {
                window = tmpWindow;
            }
        }
    }
    return window;
}

然后移除该视图

UIWindow *window = [self currentWindow];
for (UIView *v in window.subviews) {
   if ([v isKindOfClass:[NSObject class]]) {
      [v removeFromSuperview];
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值