2010-12-10 3 views
1

J'ai créé moi-même un menu contextuel (dessine un menu et affiche certains éléments). Mais j'espère que lorsque vous touchez un endroit en dehors de l'uiview, le menu contextuel disparaîtra.touchez n'importe quel endroit à l'extérieur du menu contextuel (auto-tirage) pour masquer l'image

J'essaie d'utiliser

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    //UITouch* touch = [touches anyObject]; 


} 


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
} 

pour attraper l'événement tactile, mais il semble que quelque temps la fonction ci-dessus ne sont pas déclenchées.

Bienvenue tout commentaire

Merci

InterDev

+0

Vérifiez si l'interaction utilisateur est activée pour toutes les vues, et si vous voulez détecter l'événement touchers juste pour une vue spécifique, inscrivez simplement cette vue à UITouch * au lieu de UITouch * touch = [touche anyobject]; –

+0

Oui, chaque interaction utilisateur est activée. J'espère qu'il peut attraper n'importe quel contact en dehors de l'uiview – arachide

Répondre

0

Que voulez-vous mettre en œuvre dans le touchesCanceled: withEvent: Parfois, le flux tactile sera touchéBegan -> (touchesMoved) -> touchesAnnulées, aucune toucheEnded happaned.

1

Je l'ai fait par le passé en créant un UIView personnalisé, puis en remplaçant la méthode pointInside de la classe UIView. C'est la méthode qui se déclenchera chaque fois qu'un UIView recevra une notification tactile. Quand cela arrive, vous pouvez alors savoir si le toucher était à l'intérieur ou à l'extérieur de vos limites de vues.

Par exemple, votre UIView personnalisé pourrait ressembler à ceci:

CustomTouchUIView.h

#import 

@protocol CustomTouchUIViewDelegate 

- (void) uiViewTouched:(BOOL)wasInside; 

@end 

@interface CustomTouchUIView : UIView 

// Properties 
@property (nonatomic, assign) id delegate; 

@end 

CustomTouchUIView.m

#import "TOTouchUIView.h" 

@implementation CustomTouchUIView 

#pragma mark - Synthesize 
@synthesize delegate; 

#pragma mark - Touches 
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    if(point.x > 0 && point.x < self.frame.size.width && point.y > 0 && point.y < self.frame.size.height) 
    { 
     [delegate uiViewTouched:YES ]; 
     return YES; 
    } 

    [delegate uiViewTouched:NO ]; 
    return NO; 
} 
@end 

J'ai un exemple téléchargeable/tutoriel en ligne here

+0

Vous pouvez utiliser 'CGRectContainsPoint' au lieu de' if'. –

+0

Le lien est cassé – phatmann