需求
想给UIView 加上一个 loading信息,开始网络请求前显示loading信息,数据加载完成后去掉。简单来实现可以在VC里面实现,但是代码复用度不高。看到Coding里有个不错的做法,把loading执行开始结束过程放到uiview category里面这样任何view 都可以轻松的调用。
接口
//调用接口
@property (strong, nonatomic) EaseLoadingView *loadingView;
- (void)beginLoading;
- (void)endLoading;
实现
//类似 NSDictionary 方式添加key value
- (void)setLoadingView:(UIView *)loadingView{
//LoadingViewKey属性有变化才执行
[self willChangeValueForKey:@"LoadingViewKey"];
//给view 添加loadingView
objc_setAssociatedObject(self, &LoadingViewKey,
loadingView,
OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self didChangeValueForKey:@"LoadingViewKey"];
}
- (UIView *)loadingView{
//通过key来获取 loadingView
return objc_getAssociatedObject(self, &LoadingViewKey);
}
细节
由于关联对象使用key比对时候需要指针相等,所以key定义全局变量。
如:static char kAssociatedObjectKey;
参考
http://nshipster.cn/associated-objects/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。