1. 程式人生 > >自定義TabBar如何實現連續點選重新整理

自定義TabBar如何實現連續點選重新整理

首先找到自定義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