2012-02-19 3 views
0

사용자가 두 손가락으로 화면을 터치 할 때 함수를 적용해야합니다. 화면에있는 내 문제는 UITextView입니다.UITextView에서 두 손가락으로 앞으로 이벤트 터치

활성 키보드가 화면에 나타나기 때문에 일반적인 구성 (UITapGestureRecognizer)이이 구성에서 작동하지 않습니다.

어떻게하면됩니까?

감사합니다.

+0

다음 singleTap의

유지 트랙 그냥 UITextView 이후 지속적으로 추가하고 삭제 제스처되고, 두 손가락 탭을 추가하기위한 감시 역할 ? –

+0

두 손가락으로 예. 감사합니다 – benhi

+0

내 대답을 확인하십시오. 아마도 도움이 될 것입니다. –

답변

1

당신은 어쩌면이 링크는 당신을 도울 것입니다 감동을 전달하는 UIKeyboard를 서브 클래 싱 할 수 없기 때문에.

Detect if the user has touched the screen

UIWindow의 서브 클래스있다 - 당신은 그들이 키보드에 도착하기 전에 접촉을 잡을 수있다 (AppDelegate에의) 기본 응용 프로그램 창으로 설정합니다. 거기서 당신은 접촉이 UITextField 영역에 있는지 (그리고 제대로 처리하는지) 확인하거나 응답 체인에 보내야합니다.

제스처 인식기를 사용하는 것만 큼 우아하지는 않지만 제대로 작동하게 만들 수 있습니다.

3

UITapGestureRecognizerUITextView에 추가해야합니다.

다음은해야 할 작업은 다음과 같습니다

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(respondToTap)]; 

[singleTap setNumberOfTapsRequired:2]; 
[self.yourTextView addGestureRecognizer:tapRecognizer]; 


-(void)respondToTap{ 
//do whatever you have to when textfield is double tapped 
} 
+0

답장을 보내 주셔서 감사하지만 작동하지 않습니다. 이미이 방법을 시도했습니다. 문제는 UITapGestureRecognizer가 UITextView에서 지원되지 않는다고 생각합니다. – benhi

+0

이상하게도 잘 작동합니다. –

+0

하지만 단 한 번의 탭만으로 여러 개가 작동하지 않을 수 있습니다. 혼란을 드려 죄송합니다. –

0

this answer I gave to a similar question과 비슷하지만 iOS 10에서만 사용했던주의 사항이 적용되어 UITextView을 맞춤 클래스로 확장하고 addGestureRecognizer:을 재정 의하여이 작업을 수행 할 수 있습니다. 그래서 당신은`UITextView`가 터치에 반응을하려고하는

@interface MyCustomTextView() 

@property (weak, nonatomic) UITapGestureRecognizer *singleTap; 

@end 


@implementation MyCustomTextView 

/** 
* this will fire when the text view is tapped with two fingers 
* 
* @param tgr 
*/ 
- (void)_handleTwoTouches:(UITapGestureRecognizer *)tgr 
{ 
    // ADD CODE HERE 
} 

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    [super addGestureRecognizer:gestureRecognizer]; 
    if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
     UITapGestureRecognizer *tgr = (UITapGestureRecognizer *)gestureRecognizer; 
     if ([tgr numberOfTapsRequired] == 1 && [tgr numberOfTouchesRequired] == 1) { 

      if (!self.singleTap) { 
       self.singleTap = tgr; 

       UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_handleTwoTouches:)]; 
       tap.numberOfTapsRequired = 1; 
       tap.numberOfTouchesRequired = 2; 
       [super addGestureRecognizer:tap]; 

      } 

     } 
    } 
} 

@end