0

我正在使用 iPhone 应用程序中的 UIPickerview 控件。我想检测 UIPickerView 的选择指示器上的触摸。请帮助我。现在我正在使用以下代码

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(pickerViewTapGestureRecognized:)];
 [self.picker addGestureRecognizer:gestureRecognizer];

-(void)pickerViewTapGestureRecognized:(UITapGestureRecognizer *)gestureRecognizer
{
CGPoint touchpoint = [gestureRecognizer locationInView:gestureRecognizer.view.superview];
CGRect frame = self.picker.frame;
CGRect selectorFrame = CGRectInset(frame, 0.0, self.picker.bounds.size.height * 0.85/2.0);
if (CGRectContainsPoint(selectorFrame, touchpoint)) {

  }
}
4

1 回答 1

0

从这里开始:在 UIPickerView 而不是 UIView 中响应 touchesBegan

继承 UIpickerView 是正确的方法。但是你必须用Event:(UIEvent *)event 方法覆盖 - (UIView *)hitTest:(CGPoint)point。这是每当您触摸屏幕时调用的方法,它会返回将对触摸做出反应的视图。换句话说,将调用 touchesBegan:withEvent: 方法的视图。

UIPickerView 有 9 个子视图!在 UIPickerView 类实现中 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 不会返回 self (这意味着您在子类中编写的 touchesBegan:withEvent: 不会被调用)但会返回一个子视图,正是索引 4 处的视图(一个名为 UIPickerTable 的未记录子类)。

诀窍是让 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 方法返回 self,这样您就可以控制 touchesBegan:withEvent:、touchesMoved:withEvent: 和 touchesEnded:withEvent: 方法。

于 2013-08-30T09:40:18.703 回答