我正在使用 anUIStepper
来更改显示在 a 中的值,UITextField
并且可以选择在UITextField
.
一切正常,但有一个不受欢迎的行为:UITextField
只能编辑按下对象本身的上半部分,因为下半部分的触摸被UIStepper
.
我一直在寻找答案,但我没有找到任何答案。不过我有一些提示。
UIStepper
有 2 个按钮和 1 个ImageView
,并且在整个过程中检测到触摸ImageView
(不可见或不可编辑)。
有任何想法吗?
我正在使用 anUIStepper
来更改显示在 a 中的值,UITextField
并且可以选择在UITextField
.
一切正常,但有一个不受欢迎的行为:UITextField
只能编辑按下对象本身的上半部分,因为下半部分的触摸被UIStepper
.
我一直在寻找答案,但我没有找到任何答案。不过我有一些提示。
UIStepper
有 2 个按钮和 1 个ImageView
,并且在整个过程中检测到触摸ImageView
(不可见或不可编辑)。
有任何想法吗?
要解决这个问题很可能需要子类化。您可以pointInside:withEvent:
在UIStepper
子类中覆盖并返回NO
,除非严格在步进器的范围内:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return CGRectContainsPoint(self.bounds, point);
}
一种选择是将步进器和文本字段都放在一个容器视图中,-hitTest:withEvent:
以便在查询步进器之前查询文本字段。如果文本字段说它被击中,则返回一个指向文本字段的指针。如果没有,请检查步进器,如果它说它被击中,则返回。
控件有时会假装比实际更大,以便更容易触摸。使用前面的技术应该可以让您尽可能多地保留步进器的额外可触摸区域,而不会妨碍文本视图的使用。