1

かなり広範なフォームを含むアプリがあります。50かそこらのエントリ。私の階層は次のようになります。ビューが重なっているため、フォームビューのテキストフィールドをクリックしてもカーソルが表示されません。

viewController.view(UIView)

svParent(UIScrollView)

セクション(UIView)

titlebar(UIView)/ contentWrapper(UIScrollView)(以下の兄弟はcontentWrapperの子です)

form(UIView)

textfield(UITextField)

textfield(UITextField)

textfield(UITextField)

...等々...

サブビュー上のオブジェクトにアクセスできるように、スーパービューでhitTestをオーバーライドするという概念は理解していますが、プログラムする方法が正確にはわかりません。

私のviewControllerでこれを追加しました:

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

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

しかし、シミュレータウィンドウのどこをクリックしても、何もログに記録されません。他にやらなければならないことはありますか?そして、誰かがその後に何が起こるかを明確にすることができます-これは、適切に機能しているときに、最も低いサブビューがファーストレスポンダーのステータスを取得してアクティブになる(つまり、編集可能なテキストフィールドの場合)という自動魔法のようなものです。

4

2 に答える 2

3

まず、hitTest:はのメソッドでありUIView、ではないため、ビュー階層のどこか(おそらく最上位)にUIViewControllerカスタムサブクラスが必要です。UIView

次に、メソッドはではなくビューを返すことになっているBOOLため、返すNOことはあまり意味がありません。

于 2012-10-10T18:34:16.423 に答える
3

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

AFAIKは、View Controllerではなく、UIViewサブクラスに実装されています。

階層をよりよく理解するには、この回答を参照してください

于 2012-10-10T18:16:24.053 に答える