我有一个UIPickerView,在不使用时会逐渐淡出到20%的alpha值。我希望用户能够触摸选择器并使它退回。

如果在主 View 上放置touchesBegan方法,则可以使它工作,但这仅在用户触摸 View 时有效。我尝试对UIPickerView进行子类化,并在其中添加了touchesBegan,但是没有用。

我猜想这与Responder链有关,但似乎无法解决。

最佳答案

我一直在寻找解决此问题的解决方案已有一个多星期了。即使您的问题已经超过一岁,我仍在回答您,希望对您有所帮助。

抱歉,如果我的语言不是很熟练,但是我对Objective-C和iPhone开发还很陌生。

子类化UIpickerView是正确的方法。但是您必须重写- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法。每当您触摸屏幕时都会调用此方法,它会返回对触摸有反应的 View 。换句话说,将调用其touchesBegan:withEvent:方法的 View 。

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

诀窍是使- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法返回self,以便您可以控制touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:方法。

在这些方法中,为了保持UIPickerView的标准功能,您必须记住在UIPickerTable subview 上再次调用它们。

我希望这是有道理的。我现在无法编写代码,一回到家,我就会编辑此答案并添加一些代码。

关于objective-c - 在UIPickerView中而不是UIView中响应touchesBegan,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/567805/

10-14 21:49