我有一个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/