2012-04-18 14 views
3

私はテキストビューの指定された部分にあるタッチにのみ応答したいUITextViewを実装しようとしています。UIGestureRecognizerとUITextView

ジェスチャ認識機能がビューに添付されていて、最初のレスポンダになるまでビューが設定されるまで正常に動作します。ビュー内のタップのポイントがXとYの値より大きい場合に行います。ファーストレスポンダになるように設定し、そのテキストビューの外側をタップすることで辞任したら

- (IBAction)textViewTapped:(UIGestureRecognizer *)sender { 
CGPoint point = [sender locationOfTouch:0 inView:self.view]; 

NSLog(@"x ix %f, y is %f", point.x, point.y); 

if (point.x > 96 && point.y > 106) 
    [self.myTextView becomeFirstResponder]; 
} 

問題は、ある、私のジェスチャー認識の方法が再び呼び出されることはありません。最初のレスポンダが設定されていない領域をタップすると、私のメソッドは何度も呼び出されます。私が最初のレスポンダーを設定して辞任すると、最初にレスポンダーが辞任した後に応答しません。物事をしようとして

 
- (IBAction)viewTapped:(UIGestureRecognizer *)sender { 
    [self.view endEditing:YES]; 

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textViewTapped:)]; 
    [self.myTextView addGestureRecognizer:tap]; 
    NSArray *gestures = [self.myTextView gestureRecognizers]; 
    NSLog(@"got %d recognizers", [gestures count]); 
} 

私はそれぞれの後に新しいジェスチャー認識を追加した場合、辞任、そして働くことが、明らかに良い解決策ではありません。

どのような考えですか?

答えて

5

私は同じ問題を抱えている、と私はその後、UIGestureRecognizerDelegate

#pragma mark - UIGestureRecognizerDelegate 

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{ 
    return YES; } 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer 
*)otherGestureRecognizer{ 
    return YES; } 

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 
    return YES; } 

これが私の作品を実装するコードに

myGestuerRecognizer.delegate = self 

これを追加ダミーUIGestureRecognizerDelegate

を実装することによって、それを解決

+0

' - gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:'十分です – iwill

0

iOSの10スウィフト3.0

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {  
    return true 
} 
関連する問題