2011-10-10 10 views

risposta

1

è possibile tenere traccia della data ultima tocco e confrontare alla data tocco corrente. Se la differenza è abbastanza piccola (0,7 sec), puoi considerare un doppio tocco.

Implementare questo in una sottoclasse di UITabVarController utilizzando un metodo delegato shouldSelectViewController.

Ecco un codice funzionante che sto utilizzando.

#import "TabBarController.h" 
#import "TargetVC.h" 

@interface TabBarController() 

@property(nonatomic,retain)NSDate *lastTouchDate; 

@end 

@implementation TabBarController 

//Remeber to setup UINavigationController of each of the tabs so that its restorationIdentifier is not nil 
//You can setup the restoration identifier in the IB in the identity inspector for you UIViewController or your UINavigationController 
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{ 
    NSString *tab = viewController.restorationIdentifier; 

    if([tab isEqualToString:@"TargetVC"]){ 

     if(self.lastTouchDate){ 

      UINavigationController *navigationVC = (UINavigationController*)viewController; 
      TargetVC *targetVC = (TargetVC*)navigationVC.viewControllers[0]; 

      NSTimeInterval ti = [[NSDate date] timeIntervalSinceDate:self.lastTouchDate]; 
      if(ti < 0.7f) 
       [targetVC scrollToTop]; 

     } 

     self.lastTouchDate = [NSDate date]; 
    } 

    return YES; 
} 
0

È possibile aggiungere un gesto tap sulla barra delle linguette:

-(void)addTapGestureOnTabbar 
{ 
    UITapGestureRecognizer *tap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapTabbarHappend:)]; 
    tap.numberOfTapsRequired = 2; 
    tap.delaysTouchesBegan = NO; 
    tap.delaysTouchesEnded = NO; 
    [_tabBarController.tabBar addGestureRecognizer:tap]; 
} 

-(void)doubleTapTabbarHappend:(UITapGestureRecognizer *)gesture 
{ 
    CGPoint pt = [gesture locationInView:self.tabBarController.tabBar]; 
    NSInteger count = self.tabBarController.tabBar.items.count; 
    CGFloat itemWidth = [UIScreen mainScreen].bounds.size.width/(count*1.0); 
    CGFloat temp = pt.x/itemWidth; 
    int index = floor(temp); 
    if (index == kTabbarItemIndex) { 
     //here to scroll up and reload 
    } 
} 
0

si può vedere il codice di UITabBarItem (QMUI) in QMUI iOS, supporta all'utilizzo di un blocco se l'utente doppio tap del UITabBarItem, e si può trovare un codice di esempio per questo here.

tabBarItem.qmui_doubleTapBlock = ^(UITabBarItem *tabBarItem, NSInteger index) { 
    // do something you want... 
}; 
Problemi correlati