2012-04-20 14 views
1

私はサブビューを持っており、ビューの一部は透明なので、透明な空間に触れると、表示されているもの(その下にあるもの)は対話型でなければなりません。super becomeFirstResponder not working

- (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 resignFirstResponder]コールを持つことです。しかし、私は自分のコードでこのクラスの多くのインスタンスを使用することを計画しているので、私はタッチを見つけて、私のインスタンスの各フレームなどと比較しなければならないでしょう。

ありがとうございました!

P.sさんが私の質問を変える問題に気づいただけです。スーパービューを最初のレスポンダにする場合、そのスーパービューではtouchesBeganメソッドが呼び出され、そこでタッチを管理する必要があります。 eeeeeek。

+0

NSLog(@ "%@"、self.superView ");が目的の出力を返すかどうかチェックしましたか?また、[super becomeFirstResponder'"が動作していないということを意味しますか?それは失敗しますか? –

+0

はい、それはありません。コードはそこになければ、まったく同じ動作が出現します。 – prince

+0

あなたのスーパービューは参照しているサブビューと同じ種類のオブジェクトですか?スーパービューを管理するビューコントローラで、 ' - (BOOL)canBecomeFirstResponder { return YES; }'? –

答えて

2

この

[self.superview becomeFirstResponder];をしようとしましたか?

+0

まだ同じ動作:/ – prince

+0

私は自分のロジックに問題が見つかりました。 – prince

+0

@ JamesPrinceあなたのロジックの問題にかかわらず、 '[super resignFirstResponder]'が間違っています。あなたはスーパークラスとスーパービューを混乱させています。これはまったく異なるものです。 –