业务场景
今天和朋友在群里讨论,他说需要在app最小化回来之后 刷新当前页面,也就是再次网络请求。
方案
- 1 每个界面注册通知,收到通知掉起网络,然后在appdelegate 最小化时候发送通知。
- 2 还是用通知,写一个基类,所有controller继承refreshNewWork方法
- 3 没想到...😆
第一种方法当我们页面特别多得时候 显然有点不合理了,目前看起来第二种方案好像还可以。
首先看baseviewController方法
[self recieveDefaultcenter];
//通知
- (void)recieveDefaultcenter{
NSNotificationCenter *notiCenter = [NSNotificationCenter defaultCenter];
[notiCenter addObserver:self selector:@selector(receiveNotification:) name:@"refreshNetWork" object:nil];
}
- (void)receiveNotification:(NSNotification *)notify{
[self getCurrentViewController];
}
- (void)getCurrentViewController{
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
NSLog(@"当前controller%@",[currentVC class]);
NSString *className = [NSString stringWithFormat:@"%@",[currentVC class]];
ViewControllerConst *viewConst = [ViewControllerConst shareViewConst];
NSArray *arr = [viewConst registViewControllers];
for (int i = 0; i<arr.count; i++) {
if ([className isEqualToString:arr[i]]) {
viewConst.isRefresh = YES;
}
}
[self refreshNewWork:className isRefresh:viewConst.isRefresh];
}
-(void)refreshNewWork:(NSString *)className isRefresh:(BOOL)isRefresh{
}
- (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC
{
UIViewController *currentVC;
if ([rootVC presentedViewController]) {
// 视图是被presented出来的
rootVC = [rootVC presentedViewController];
}
if ([rootVC isKindOfClass:[UITabBarController class]]) {
// 根视图为UITabBarController
currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
} else if ([rootVC isKindOfClass:[UINavigationController class]]){
// 根视图为UINavigationController
currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
} else {
// 根视图为非导航类
currentVC = rootVC;
}
return currentVC;
}
viewconst 是我建的一个类
想通过这个类 去过滤获取到的viewcontroller
本来想这样搞
ViewControllerConst *viewConst = [ViewControllerConst shareViewConst];
NSArray *arr = [viewConst registViewControllers];
for (int i = 0; i<arr.count; i++) {
if ([className isEqualToString:arr[i]]) {
viewConst.isRefresh = YES;
}
}
[self refreshNewWork:className isRefresh:viewConst.isRefresh];
这个过滤 有问题 永远会是yes 所以卡在这了
然后我在子类里面过滤了
-(void)refreshNewWork:(NSString *)className isRefresh:(BOOL)isRefresh{
NSString *currenClass = [NSString stringWithFormat:@"%@",[self class]];
if ([currenClass isEqualToString:className]) {
NSLog(@"首页刷新");
}
}
为什么要判定,如果不判定 当我点击第二个界面最小化之后 第一个界面 还是会走刷新方法。
想知道各位有没有什么好的方法实现.