2011-06-29 32 views
2

我的程序基本上是這樣的:UITapGestureRecognizer動作未被觸發; userInteractionEnabled已經被設置爲YES

的UIViewController - >自定義的UIView - > [UIImageView的數組]

我的問題是,我的識別器的操作方法永遠不會被調用。我已經將我的UIImageViews的userInteractionEnabled屬性設置爲YES。

在我的視圖控制器的viewDidLoad:

- (void)viewDidLoad 
{ 
    NSEnumerator *enumerator = [grid.subviews objectEnumerator]; 
    UIImageView *view; 
    UITapGestureRecognizer *recognizer; 

    while((view = [enumerator nextObject])){ 
     recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openDeal:)]; 

     view.userInteractionEnabled = YES; 
     recognizer.delegate = self; 
     recognizer.numberOfTapsRequired = 1; 
     [view addGestureRecognizer:recognizer]; 
     NSLog(@"%d", (int)view.userInteractionEnabled); 
     [recognizer release]; 
    } 
    [super viewDidLoad]; 
} 

和openDeal的定義是這樣的:

-(void) openDeal:(UITapGestureRecognizer *) recognizer{ 
    NSLog(@"%@",[NSString stringWithFormat:@"%d", recognizer.view.tag]); 
} 

回答

0

第一個想法: 你的方法更改爲:

-(void) openDeal:(UIGestureRecognizer *) recognizer{ 
    NSLog(@"%@",[NSString stringWithFormat:@"%d", recognizer.view.tag]); 
} 
+0

試過你的解決方案。沒有解決錯誤。 – louallen

0

while方法看起來奇怪?你確定它在運行嗎?

嘗試枚舉子視圖數組按下面,看看是否有幫助?

NSArray *subviewsArray = grid.subviews; 
for (id imageView in subviewsArray) 
{ 
    if ([imageView isKindOfClass:[UIImageView class]]) 
    { 
    // run your code here 
    } 
} 
+1

我不認爲循環是問題。循環內的NSLog實際上給出了輸出,所以我不認爲這個錯誤在那裏。 – louallen

+0

嘗試nslogging實際的視圖對象,看看你是否真的遍歷while循環中的uiimageviews。 – Rog

+0

是的,是的。 – louallen

3

我有同樣的問題,後來發現,我分配相同的手勢識別的實例另一種觀點。手勢識別器只能關聯到單個視圖(您可以通過UIGestureRecognizer的視圖屬性來驗證)。

確保您沒有在代碼中的其他地方重複使用您的識別器。

1

我剛纔有同樣的問題。

首先,檢查視圖屬性。如果它在addGestureRecognizer之後爲空,則不起作用。

我的問題解決後,我刪除了委託給屬性。

因此,代碼看起來像:

{ 
    UITapGestureRecognizer *bmSingleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bmSingleTap:)]; 
    bmSingleTap.numberOfTapsRequired = 1; 
    //bmSingleTap.delegate = self; 
    [bookmarkTapArea addGestureRecognizer:bmSingleTap]; 
    NSLog(@"tap: %@ %i", bmSingleTap.view, bmSingleTap.enabled); 
} 

編輯:順便說一下,後來我想重現此bmSingleTap.view ==無效果,不能。可能幹淨的重建可以解決問題。

+0

注意:這個答覆在2017年9月18日downvoted;因爲它在2011年爲我工作,我的猜測是,6年內可能會發生變化。請留下相關的評論,而不是隻是downvoting。 – 18446744073709551615