1

我有一个应用程序,其中将有一个非常广泛的形式。五十个左右的条目。我的层次结构看起来像这样。由于覆盖视图,表单视图中的文本字段在单击时不会在其中获得光标:

viewController.view (UIView)

svParent (UIScrollView)

部分(UIView)

titlebar(UIView)/contentWrapper(UIScrollView) (以下兄弟姐妹是 contentWrapper 的孩子)

表单(UIView)

文本字段(UITextField)

文本字段(UITextField)

文本字段(UITextField)

...等等...

我理解在超级视图上覆盖 hitTest 的概念,以便可以访问子视图上的对象,但我不完全确定如何对其进行编程。

在我的 viewController 我添加了这个:

 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    NSLog(@"ok");
    return NO;
}

但无论我在模拟器窗口中的哪个位置单击,都不会记录任何内容。还有什么我需要做的吗?然后有人可以澄清之后会发生什么 - 这是一些自动的事情,当正常运行时,最低的子视图将获得第一响应者状态并变为活动状态(即在文本字段可编辑的情况下)。

4

2 回答 2

3

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event ;

AFAIK it is implemented in UIView subclass, and not in view controller.

For better understanding hierarchy, refer this answer

于 2012-10-10T18:16:24.053 回答
3

首先,hitTest:是一个方法UIView,不是UIViewController,所以你需要一个自定义UIView子类在你的视图层次结构中的某个地方(可能在顶部)。

其次,该方法应该返回一个视图,而不是 a BOOL,因此返回NO没有多大意义。

于 2012-10-10T18:34:16.423 回答