自定義TabBar如何實現連續點選重新整理
阿新 • • 發佈:2019-02-05
首先找到自定義TabBar按鈕的點選方法
//按鈕被選中的事件 -(void) buttonSelected:(UIButton *) button{ self.lastBut.selected=NO; button.selected=YES; self.lastBut=button; NSInteger index=[self.subviews indexOfObject:button]; if (index>2) { index--; } //通過代理重新整理viewcontroller if ([self.delegate respondsToSelector:@selector(tabBarRefreshController:currentIndex:)]) { [self.delegate tabBarRefreshController:self currentIndex:index]; } }
接下來找到代理方法
//HQTabBarView當中的代理方法用來重新整理資料
-(void)tabBarRefreshController:(HQTabBarView *)tabBarView currentIndex:(NSInteger)currentIndex{ //當tableBar被選中之後,傳送一個通知 //在我們的精華控制器內接收該通知 NSMutableDictionary *info=[NSMutableDictionary dictionary]; info[HQTabBarControllerSelectionIndexKey]=[NSNumber numberWithInteger:currentIndex]; [[NSNotificationCenter defaultCenter] postNotificationName:HQTabBarControllerSelectedNotification object:nil userInfo:info]; self.selectedIndex=currentIndex; }
在代理方法裡傳送了一個通知,然後去需要重新整理的viewcontroller接收通知
-(void) tabBarClicked:(NSNotification *) notification{ NSDictionary *info=notification.userInfo; //當前被選中的index NSInteger currentIndex=[info[HQTabBarControllerSelectionIndexKey] integerValue]; self.clickCount++; //判斷是不是精華控制器+是不是當前視窗+是不是連續點選 if (currentIndex==0&&[self.view isShowingInWindow]&&self.clickCount>1) { [self.tableView.mj_header beginRefreshing]; } //如果點選了其他的控制器,將點選次數清零 if (currentIndex!=0) { self.clickCount=0; } }
附判斷一個view是否在當前視窗
#import "UIView+HQExtension.h"
@implementation UIView (HQExtension)
-(BOOL)isShowingInWindow{
//拿到主視窗
UIWindow *window=[UIApplication sharedApplication].keyWindow;
//轉換座標系
CGRect newFrame=[window convertRect:self.frame fromView:self.superview];
//判斷當前view的frame是否在視窗內
BOOL isIn=CGRectIntersectsRect(newFrame, window.bounds);
return !self.hidden&&self.alpha>0.01&&self.window==window&&isIn;
}
@end