2012-02-05 7 views
1

ユーザーがUITextView要素の画面に触れるときにキーボードを辞めるのに役立つコードがいくつか見つかりました。タッチ時にキーボードを辞める

はここにそれがどのように見えるかです:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [[event allTouches] anyObject]; 
if([self.speechBubble.speechText isFirstResponder] && [touch view] != self.speechBubble.speechText){ 
    [self.speechBubble.speechText resignFirstResponder]; 
} 
[super touchesBegan:touches withEvent:event]; 
} 

これは、これまで完璧に動作し、ユーザーがテキストビューの外側の任意の場所をタッチした場合は、キーボードを削除します。しかし、それは私がそれを実行している特定のオブジェクトのためにのみ働くので、私は2つのspeechBubblesを持っていれば動作しません。

これを変更して、どのspeechBubbleでも同じ効果が得られるようにするにはどうすればよいですか? (私はこのコードを私のViewControllerから私のSpeechBubbleクラスに移すことができましたが、[touch view]を使ってspeechBubbleのビューの外に触れる方法は少し問題がありました)ありがとう

答えて

3

私が最近発見したこと

[self.view endEditing:YES]; 

それは現在、手動での自分を追跡するためになくても、それを持っている任意の要素から最初の応答者を辞任します:つまり、あなたに有用であり得ます。あなたのサンプルコードを参照する

、このような何かがうまくいくかもしれない、あなたのspeechBubblesがどのように動作するかに依存する:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    // Note the '!': 
    if(![[touch view] class] isKindOfClass [speechBubble class]]){ 
    // It's not a bubble they touched, dismiss the keyboard: 
    [self.view endEditing:YES]; 
    } 
    [super touchesBegan:touches withEvent:event]; 
} 
+0

ファンタスティック、endEditingは素晴らしいです。私はisKindOfClassを使用しようと考えていましたが、そのような[touch view]クラスにアクセスできるかどうかはわかりませんでした。ありがとう – user339946

関連する問題