关闭

iOS - 网络数据加载等待页面的简单实现

标签: iOS数据加载页
2434人阅读 评论(0) 收藏 举报
分类:

iOS系统提供的加载等待控件UIActivityIndicatorView(传说中的菊花), 有时候难免有点单调生涩. 故在此简单封装了一下:

#import <UIKit/UIKit.h>

#define kSideWidth 80
#define kSideHeight 80

#define kCornerRadius 5

#define kLoadingTime 5

#define kTips "数据努力加载中"

#define kTipsTimeInterval 0.5

typedef void (^failedBlock)(void);


typedef NS_ENUM(NSInteger, MHPopViewType) {
    MHPopViewTypeFullScreen,
    MHPopViewTypeWrapContent,
    MHPopViewTypeFullScreenWithTips,
    MHPopViewTypeWrapContentWithTips,
    MHPopViewTypeTips,
};


@interface MHProgress : UIView
- (instancetype)initWithType:(MHPopViewType)type;

- (instancetype)initWithType:(MHPopViewType)type failedBlock:failedBlock;
- (void)showLoadingView;
- (void)closeLoadingView;
- (void)showTips:(NSString *)tips intInterval:(CGFloat)timeInterval;

@end

MHPopViewType:



还有两种就是只显示菊花, 没有提示的文字.

提供的接口也很简单, 初始化的时候带上定义好的type就OK, 然后就是对应的显示方法, 不用解释, 字面意思就够了. 

需要注意的一点是, 有个init方法会有传入一个空得Block, 这个Block中的代码块是在规定显示时间(kLoadingTime)显示完之后执行的. 举个栗子吧:

在进行网络请求数据之前, 为了阻止用户对UI的操作, 定义一个MHProgress, 然后把它show出来. 当网络数据请求过来的时候, 就可以close掉它. 但这只是理想情况, 当网络状况不是很好地时候, 这个时候就不能让它一直show着, 一般采取的做法是, 给它了固定的显示时间(kLoadingTime), 超出这个时间就可以假定网络请求"失败"了. 这时, 对"失败"情况的处理就各取所需了, 可以AlertView一下, 也可以showtips一下. 这些处理就可以在Block中进行.

目前封装的还有些问题, 比如在实例化一个实例之后, 先对它进行showLoading操作, 再进行showTips操作, 这个时候显示就会有问题. 因为是同一个实例, 在实现的时候会对全局变量有更改, 所以只能定义两个实例, 对这两个操作分开进行. 这点读者也可以进行改善.

源码下载

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场