UIStepper 吞下触摸

Posted

技术标签:

【中文标题】UIStepper 吞下触摸【英文标题】:UIStepper swallows the touch 【发布时间】:2012-10-20 20:45:39 【问题描述】:

我正在使用UIStepper 来更改UITextField 中显示的值,并且可以选择在UITextField 中输入值进行编辑。

一切正常,但有一个不受欢迎的行为:UITextField 只能按对象本身的上半部分进行编辑,因为下半部分的触摸被 UIStepper 吞噬。

我一直在寻找答案,但我没有找到任何答案。不过我有一些提示。

UIStepper 有 2 个按钮和 1 个ImageView,在整个ImageView 中检测到触摸(不可见或不可编辑)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

要解决这个问题很可能需要子类化。您可以在 UIStepper 子类中覆盖 pointInside:withEvent: 并返回 NO,除非严格在步进器的范围内:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
    return CGRectContainsPoint(self.bounds, point);

【讨论】:

【参考方案2】:

一种选择是将步进器和文本字段都放在覆盖-hitTest:withEvent: 的容器视图中,以便在查询步进器之前查询文本字段。如果文本字段说它被击中,则返回一个指向文本字段的指针。如果没有,请检查步进器,如果它说它被击中,则返回它。

控件有时会假装比实际更大,以便更容易触摸。使用前面的技术应该可以让您在不妨碍使用文本视图的情况下尽可能多地保留步进器的额外可触摸区域。

【讨论】:

以上是关于UIStepper 吞下触摸的主要内容,如果未能解决你的问题,请参考以下文章

第五篇 - UIStepper

Swift - UIStepper

UIStepper 从屏幕上移出,为啥?

UIWebView 中的 UIStepper - iOS

UIStepper iOS 7

UIStepper.value 变成科学记数法