APP的结构是:rooViewcontroller是tabbarController,tabbarController有4个NavigationController + ViewController的子控制器,ViewController中有一个ScrollView,ScrollView中显示4个UITableViewController。 scrollView中的UITableViewController都继承自同一个tableViewController;
新需求:重复点击tabbarController底部的按钮时,要求刷新当前显示tableView的内容。
实现方式:重复点击tabbarController底部的按钮时发出通知,然后在tableView中监听通知。
出现问题:如果APP加载了其他ViewController, scrollView中加载了多个tableViewController时,通知会在多个页面中同时监听。
解决办法:
1、判断tableViewController的View是否有窗口,可以屏蔽掉其他ViewController;
2、判断tableViewController的View是否和keyWindow相交,可以屏蔽掉其他tableViewController;
// 如果当前控制器的view不在window上,就直接返回,
if (self.view.window == nil) return;
// 如果当前控制器的view跟window没有重叠,就直接返回
if (![self.view intersectWithView:self.view.window]) return;