2012-06-21 13 views

Odpowiedz

30

Przykład:

UIImageView *myPhoto = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"tab-me-plese.png"]]; 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(processTap:)]; 

[myPhoto setTag:1]; //set tag value 
[myPhoto addGestureRecognizer:tap]; 
[myPhoto setUserInteractionEnabled:YES]; 

- (void)processTap:(UIGestureRecognizer *)sender 
{ 
    NSLog(@"tabbed!!"); 
    NSLog(@"%d", sender.view.tag);  
} 
+4

Zapraszamy do przepełnienie stosu! Zawsze staraj się podać wyjaśnienie swojego kodu. –

+1

Jeśli potrzebujesz tylko "UIView", w którym wystąpił gest, to jest to słabo udokumentowana, ale ważna odpowiedź. W przeciwnym razie musisz połączyć to z tą odpowiedzią: http://stackoverflow.com/questions/11594610/objective-c-storing-hidden-information-into-a-uiview from @nielsbot – SwiftArchitect

+0

To oznaczanie jest bardzo przydatne przy przekazywaniu UserData - nie trzeba zrobić bałaganiarskie obliczenia lokalizacji ... – kfmfe04

3

Jest to dobra odpowiedź na podobne pytanie w iOS - UITapGestureRecognizer - Selector with Arguments, ale jeśli chcesz przekazać dane, które nie chcą dołączyć do widzenia, zalecamy utworzenie sekundę funkcja, która ma dostęp do potrzebnych danych. Na przykład:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(passDataToProcessTap)]; 

- (void)passDataToProcessTap { 
    [self processTapWithArgument:self.infoToPass]; 
    // Another option is to use a static variable, 
    // Or if it's not dynamic data, you can just hard code it 
} 

- (void) processTapWithArgument:(id)argument { 
    //do something 
} 
Powiązane problemy