Вперед событие касания двумя пальцами на UITextView - PullRequest
0 голосов
/ 19 февраля 2012

Мне нужно применить функцию, когда пользователь касается экрана двумя пальцами.Моя проблема в том, что на экране UITextView.

На экране также присутствует активная клавиатура, поэтому обычный подход (UITapGestureRecognizer) не работает для этой конфигурации.1006 * Как я могу это сделать?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 19 февраля 2012

Вам необходимо добавить UITapGestureRecognizer к UITextView.

Вот что вы должны сделать:

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
}
1 голос
/ 21 февраля 2012

Поскольку вы не можете создать подкласс UIKeyboard для передачи касаний, возможно, эта ссылка поможет вам.

Определите, коснулся ли пользователь экрана

подкласс UIWindow - если вы установите его в качестве основного окна приложения (в appDelegate), вы можете поймать касания, прежде чем они попадут на клавиатуру.Там вы сможете проверить, находятся ли касания в области UITextField (и обрабатывать их правильно), или отправить их в цепочку респондента.

Не так элегантно, как использование распознавателей жестов, но вы могли бы заставить его работать.

0 голосов
/ 05 октября 2016

Аналогично этот ответ я дал на аналогичный вопрос , но с оговоркой, что я использовал это только на iOS 10, вы можете сделать это, расширив UITextView с помощью пользовательского класса и переопределив addGestureRecognizer:.

Отслеживание SingleTap просто служит в качестве дозорного элемента для добавления касания двумя пальцами, поскольку 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
...