ios 点击出现另外一套tabbar_iOS 点击UITabBar触发刷新

首先需要自定义一个UITabBarController (比如LLTabBarController)

由于UITabBarController已经遵守了UITabBarDelegate协议:

NS_CLASS_AVAILABLE_IOS(2_0) @interface UITabBarController : UIViewController

所以在自定义的LLTabBarController中直接实现UITabBarDelegate协议中的方法监听UITabBar的点击就可:

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

在监听UITabBar点击的方法中判断本次点击的UITabBarItem和上次点击的是否一样,如果一样就发出通知

要判断本次点击的UITabBarItem和上次点击的是否一样,就需要定义一个属性记录下来上次点击的UITabBarItem,并在viewWillAppear:方法中给该属性赋值默认的UITabBarItem

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

@property (nonatomic, strong) UITabBarItem *lastItem;

- (void)viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

// 将默认被选中的tabBarItem保存为属性

self.lastItem = self.tabBar.selectedItem;

}

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

{

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

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

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

}

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

self.lastItem = item;

}

在需要实现点击UITabBar触发刷新功能的控制器中监听通知

- (void)viewDidLoad {

[super viewDidLoad];

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

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

}

- (void)tabBarDidClick

{

// 如果本控制器的view显示在最前面,就下拉刷新

if ([self.view isShowingOnKeyWindow]) { // 判断一个view是否显示在根窗口上,该方法在UIView的分类中实现

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

}

}

判断一个view是否显示在根窗口上

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

- (BOOL)isShowingOnKeyWindow

{

UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;

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

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

CGRect windowBounds = keyWindow.bounds;

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

BOOL isOnWindow = CGRectIntersectsRect(convertFrame, windowBounds);

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

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

return isShowingOnWindow;

}

在控制器销毁时要移除通知

- (void)dealloc

{

// 移除通知

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值