2011-05-21 73 views
45

我有一系列使用其標記識別的圖像。我爲圖像添加了一個輕擊手勢。UITapGestureRecognizer選擇器,發件人是手勢,而不是UI對象

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)]; 
[tableGridImage addGestureRecognizer:singleTap]; 
tableGridImage.userInteractionEnabled = YES; 
[singleTap release]; 

此設法調用selectImage選擇確定,但通過所述手勢作爲發送者。我需要將imageview作爲發件人,以便我可以獲取標籤。

關於如何獲取imageview及其標籤的任何想法?

回答

51

我想出瞭如何獲取標籤,這是對我而言問題中最重要的部分。由於手勢是發送者,我想通了,它是連接到與它一起發送的觀點:我仍然好奇,如果任何人都可以告訴我如何通過UITapGestureRecognizer選擇發送參數

[(UIGestureRecognizer *)sender view].tag 

+1

我仍然好奇,如果任何人都可以告訴我如何通過UITapGestureRecognizer選擇要發送的參數。我也是。 – 2013-02-22 14:01:04

+1

亞當我很確定這是通過UIImageView上的標籤來完成的唯一方法。您知道,在圖片上使用標籤有一些積極的方面:想象一下,例如您是否擁有多個手勢識別器,或者您是以其他方式獲取關於圖片的信息。這是好的,它是在圖像上,而不是在G.R.這是一個偉大的技巧,謝謝你的偉大的問題/答案! – Fattie 2013-12-09 23:38:20

+0

謝謝!這也幫助了我! – 2016-04-28 02:10:50

24

您可以通過UITapGestureRecognizer選擇發送的唯一參數是UITapGestureRecognizer本身如下:

確保把「」選擇名稱後像前面那樣:

UITapGestureRecognizer *singleTap = 
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)]; 

然後添加一個參數selectImage,以便您可以檢索視圖如下:

-(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{ 

    //Get the View 
    UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view; 
} 
+2

感謝您的解釋,Samidjo!作爲補充說明,我發現在視圖中添加我自己的屬性非常有用 - 「@property(weak,nonatomic)id relatedObject'。這樣,您可以通過將其分配給視圖的屬性來有效地傳入任何內容! :d – 2012-12-13 21:49:20

2

如果您需要處理程序的不同功能,則可以特別檢查BlocksKit項目和this文件。該項目是一個CocoaPods項目,因此您可以將其輕鬆安裝到工具鏈中。

一個例子,從第一個引用的代碼文件:

UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) { 
    NSLog(@"Single tap."); 
} delay:0.18]; 
[self addGestureRecognizer:singleTap]; 

這可以有效地讓你設置一個手勢識別容易爲每個圖像。

3

從@ dysan819答案,我設法得到沒有標籤的對象。在我的情況是UILabel

- (void)labelTap:(id)sender { 
    NSLog(@"tap class: %@", [[(UIGestureRecognizer *)sender view] class]); 
    if ([[(UIGestureRecognizer *)sender view] isKindOfClass:[UILabel class]]) { 
     UILabel *lb = (UILabel*)[(UIGestureRecognizer *)sender view]; 
     NSLog(@"tap: %@", lb.text); 
    } 
} 
相關問題