サブビューがあり、ビューの一部が透明であるため、ユーザーがその透明なスペースに触れると、表示されているもの (ただしその下にもあるもの) はインタラクティブでなければなりません。
- (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 メソッドが呼び出され、そこでタッチを管理する必要があります。ええええええ。