1

サブビューがあり、ビューの一部が透明であるため、ユーザーがその透明なスペースに触れると、表示されているもの (ただしその下にもあるもの) はインタラクティブでなければなりません。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint pt = [[touches anyObject] locationInView:self];
if (CGRectContainsPoint(tableViewUse.frame, pt)){
    [self becomeFirstResponder];
}else {
    [super becomeFirstResponder];
}    
}

サブビュー クラスに上記のコードがありますが、問題は [super becomeFirstResponder] 呼び出しが機能しないことです。明らかな解決策は、スーパービューのクラスで [self rejectFirstResponder] 呼び出しを行うことです。ただし、コードでこのクラスの多くのインスタンスを使用する予定であるため、タッチを見つけて、各インスタンスのフレームと比較する必要があります。したがって、エレガントな解決策は、サブビューからすべてを制御することです。

助けてくれてありがとう!

Ps は、私の質問を変更する問題に気付きました。スーパービューをファーストレスポンダーにすると、そのスーパービューで touchesBegan メソッドが呼び出され、そこでタッチを管理する必要があります。ええええええ。

4

1 に答える 1

2

これを試した

[self.superview becomeFirstResponder];?

于 2012-04-20T12:58:41.723 に答える