我有一个 UIPickerView,在不使用时会淡出至 20% alpha。我希望用户能够触摸选择器并使其淡入。
如果我在主视图上放置一个 TouchBegan 方法,我就可以让它工作,但这仅在用户触摸视图时才有效。我尝试对 UIPickerView 进行子类化并在其中添加 TouchBegan,但它不起作用。
我猜这与响应者链有关,但似乎无法解决。
我已经寻找这个问题的解决方案一个多星期了。即使您的问题已经存在一年多了,我也会回答您,希望这对其他人有帮助。
抱歉,如果我的语言不是很技术性,但我对 Objective-C 和 iPhone 开发还很陌生。
子类化 UIpickerView 是正确的方法。但你必须覆盖- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
方法。这是每当您触摸屏幕时调用的方法,它返回将对触摸做出反应的视图。换句话说,该视图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:
and touchesEnded:withEvent:
方法。
在这些方法中,为了保持 UIPickerView 的标准功能,您必须记住在 UIPickerTable 子视图上再次调用它们。
我希望这是有道理的。我现在无法编写代码,一回到家我就会编辑这个答案并添加一些代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)