2012-03-16 241 views
3

我正在用包含UIImageView子視圖的單元填充UITableView。我想檢測圖像視圖上的觸摸,所以我還添加了一個手勢識別器。然而,沒有任何東西被調用。這裏是我的代碼:iPhone - 檢測觸摸UITableViewCell的子視圖

UIImageView *delete = [[UIImageView alloc] initWithFrame:CGRectMake(1.0, 8.0, 33.0, 33.0)]; 
delete.image = [UIImage imageNamed:@"Delete.png"]; 
delete.userInteractionEnabled = YES; 
delete.contentMode = UIViewContentModeCenter; 

UIGestureRecognizer *gesture = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(deleteTapped)]; 
gesture.delegate = self; 

[delete addGestureRecognizer:gesture]; 
[self.cellView addSubview:delete]; 

注:我在技術上增加圖像視圖的容器中,然後加入到細胞本身,所以[self.cellView addSubview:delete]。但是我有直接將圖像視圖添加到單元的結果。

根據this對類似帖子的回答,這是iOS 5.0中的一個已知錯誤;解決方案是覆蓋委託方法以強制手勢識別器開始:

修復程序是覆蓋-gestureRecognizerShouldBegin:在手勢識別器的委託中並返回YES。這個錯誤應該在未來版本的iOS 5.x中修復。只有當您不使用新的UITableViewCell複製/粘貼API時,這纔是安全的。

我試過這個,但委託方法永遠不會被調用。我給自己定了delegate屬性(見上文),並實現<UIGestureRecognizerDelegate>如下:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 
{ 
    NSLog(@"gesture delegate method called"); 
    return YES; 
} 

任何一個是否有一個想法,爲什麼這仍然無法正常工作?或者,這個錯誤的狀態是在iOS 5.1中嗎?

回答

6

嘗試返回yes該委託梅索德- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

,如果你要檢測的龍頭作用使用UITapGestureRecognizer

+1

+1,'UIGestureRecognizer'是一個抽象基類,並且不承認任何手勢。你需要使用它的一個子類。 (請參閱:http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html) – Ahti 2012-03-16 22:28:55

+0

這是一個巨大的幫助,謝謝。 – Rob 2012-03-17 02:59:11