二次点击Tabbar触发刷新

//写在 自定义一的tabbar控制器里

@interface MainViewController : UITabBarController

//上面遵守代理

/** 之前被选中的UITabBarItem */

@property (nonatomic, strong) UITabBarItem *lastItem;

- (void)viewDidLoad {

[super viewDidLoad];

// 二次点击触发刷新将默认被选中的tabBarItem保存为属性

self.lastItem = self.tabBar.selectedItem;

}

//二次点击tabbar触发刷新代理方法

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

{

// 判断本次点击的UITabBarItem是否和上次的一样

if (item == self.lastItem) { // 一样就发出通知

[[NSNotificationCenter defaultCenter] postNotificationName:@"LLTabBarDidClickNotification" object:nil userInfo:nil];

}

// 将这次点击的UITabBarItem赋值给属性

self.lastItem = item;

}

//在放在tabbar上的控制器里调用

// 监听UITabBarItem被重复点击时的通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabBarDidClick) name:@"LLTabBarDidClickNotification" object:nil];

- (void)tabBarDidClick

{

// 如果本控制器的view显示在最前面,就下拉刷新(必须要判断,否点击其他tabbar也会触发刷新)

// 判断一个view是否显示在根窗口上,该方法在UIView的分类中实现

if ([self isShowingOnKeyWindow]) {

[self.tableView.mj_header beginRefreshing]; // MJRefresh

NSLog(@"触发tabbar刷新");

}

}

/** 该方法在UIView的分类中实现 */

- (BOOL)isShowingOnKeyWindow

{

UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;

// 把这个view在它的父控件中的frame(即默认的frame)转换成在window的frame

CGRect convertFrame = [self.view.superview convertRect:self.view.frame toView: keyWindow];

CGRect windowBounds = keyWindow.bounds;

// 判断这个控件是否在主窗口上(即该控件和keyWindow有没有交叉)

BOOL isOnWindow = CGRectIntersectsRect(convertFrame, windowBounds);

// 再判断这个控件是否真正显示在窗口范围内(是否在窗口上,是否为隐藏,是否透明)

BOOL isShowingOnWindow = (self.view.window == keyWindow) && !self.view.isHidden && (self.view.alpha > 0.01) && isOnWindow;

return isShowingOnWindow;

}

你可能感兴趣的:(二次点击Tabbar触发刷新)