MBProgressHUD封装一个全局HUD.

MBProgressHUD大家肯定都会用.如何封装成一个好用的HUD是我们需要考虑的事情.这里来说一下封装思路

我们初始化应用的时候都在didfinishlaunch里头初始化_window.也就是Delegate.h里头的一个UIWindow属性.然后设置window的rootVc.那么就是说一般来说Delegate中的window不会切换.那么做一个全局的MBProgressHUD就可以到处调用,好处之一,比如我们在某个Controller里头进行请求.就是比如我们网络请求类里头进行一些公用的处理.(error之类的).在网络请求类里头hide

/// 我们可以这样拿到window.
UIWindow *window = [UIApplication sharedApplication].delegate.window;
/// 这样我们能拿到在某个view上是否有MBProgressHUD.
/// 如果没有会返回nil.有的话就返回一个MBProgressHUD
+ (nullable MBProgressHUD *)HUDForView:(UIView *)view;
/// 如果HUD上有就View就隐藏
/// 隐藏成功返回YES.没有HUD(隐藏失败)返回NO
+ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated;

根据以下API.可以改成这样


1.Delegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    _window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    _window.backgroundColor = [UIColor whiteColor];
    ViewController *viewController = [[ViewController alloc] init];
    _window.rootViewController = viewController;
    [_window makeKeyAndVisible];
    return YES;
}

2.CHAddMBProgressHUD.h

//
//  CHAddMBProgressHUD.h
//  MBProgressTest
//
//  Created by 张晨晖 on 2018/7/29.
//  Copyright © 2018年 张晨晖. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface CHAddMBProgressHUD : NSObject

+ (instancetype)sharedClass;

- (instancetype)showHUDAtWindowWithTitle:(NSString *)title;

- (void)hideHUDAtWindow;

@end

3.CHAddMBProgressHUD.m

//
//  CHAddMBProgressHUD.m
//  MBProgressTest
//
//  Created by 张晨晖 on 2018/7/29.
//  Copyright © 2018年 张晨晖. All rights reserved.
//

#import "CHAddMBProgressHUD.h"
#import "MBProgressHUD.h"

@interface CHAddMBProgressHUD ()

@property (nonatomic ,strong) MBProgressHUD *progressHUD;

@end

@implementation CHAddMBProgressHUD

+ (instancetype)sharedClass {
    static dispatch_once_t onceToken;
    static CHAddMBProgressHUD *addMBProgressHUD;
    dispatch_once(&onceToken, ^{
        addMBProgressHUD = [[CHAddMBProgressHUD alloc] init];
    });
    return addMBProgressHUD;
}

- (MBProgressHUD *)progressHUD {
    UIWindow *window = [UIApplication sharedApplication].delegate.window;
    MBProgressHUD *progressHUD = [MBProgressHUD HUDForView:window];
    if (!progressHUD) {
        progressHUD = [MBProgressHUD showHUDAddedTo:window animated:YES];
    }
    return progressHUD;
}

- (instancetype)showHUDAtWindowWithTitle:(NSString *)title {
    self.progressHUD.label.text = title;
    return self;
}

- (void)hideHUDAtWindow {
    [self.progressHUD hideAnimated:YES afterDelay:2];
}

@end

4.使用

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [[CHAddMBProgressHUD sharedClass] showHUDAtWindowWithTitle:@"呵呵"];
    [[CHAddMBProgressHUD sharedClass] hideHUDAtWindow];
}

小Tips.随意在哪里调用showHUDAtWindow.都可以把之前的MBProgressHUD替换掉.少了许多重复代码的”复制粘贴”.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值