2012-06-21 3 views
10

Я использую ниже кодКак передать аргумент к действию в действии UIGestureRecognizer initWithTarget

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

- (void) processTap 
{ 
//do something 
} 

Но мне нужно отправить данные для функции processTap. Есть какой-либо способ сделать это?

+0

Я думаю, что это должно помочь вам: HTTP: //stackoverflow.com/a/5035335/177136 – Ger

ответ

30

Пример:

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

Добро пожаловать на переполнение стека! Всегда старайтесь дать объяснение вашему коду. –

+1

Если все, что вам нужно, это 'UIView', в котором произошел жест, тогда это плохо документированный, но действительный ответ. В противном случае вы должны сочетаться с этим ответом: http://stackoverflow.com/questions/11594610/objective-c-storing-hidden-information-into-a-viview from @nielsbot – SwiftArchitect

+0

Эта маркировка чрезвычайно полезна для передачи UserData - no нужно делать грязные расчеты местоположения ... – kfmfe04

3

Там хороший ответ на аналогичный вопрос в iOS - UITapGestureRecognizer - Selector with Arguments, но если вы хотите передать данные, которые вы не хотите, чтобы прикрепить к виду, я рекомендую создать второй которая имеет доступ к необходимым вам данным. Например:

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 
}