我正在用包含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中嗎?
+1,'UIGestureRecognizer'是一個抽象基類,並且不承認任何手勢。你需要使用它的一個子類。 (請參閱:http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html) – Ahti 2012-03-16 22:28:55
這是一個巨大的幫助,謝謝。 – Rob 2012-03-17 02:59:11