UIWebview удалить нажмите, чтобы сосредоточиться - PullRequest
2 голосов
/ 15 ноября 2011

UIWebView обычно фокусируется на выбранном контенте, когда я дважды нажимаю на часть веб-сайта, и теперь я хочу, чтобы UIWebView игнорировал двойное нажатие, но при этом мог взаимодействовать с ним.

Как бы я поступил об этом?

Ответы [ 3 ]

13 голосов
/ 23 ноября 2011

Двойное касание распознается UITapGestureRecognizer.Пройдите иерархию представления, если вы действительно этого хотите.Немного сложно, но это должно сработать.

Коды выглядят так:

- (void)goThroughSubViewFrom:(UIView *)view {
    for (UIView *v in [view subviews])
    {
        if (v != view)
        {
            [self goThroughSubViewFrom:v];
        }
    }
    for (UIGestureRecognizer *reco in [view gestureRecognizers])
    {
        if ([reco isKindOfClass:[UITapGestureRecognizer class]])
        {
            if ([(UITapGestureRecognizer *)reco numberOfTapsRequired] == 2)
            {
                [view removeGestureRecognizer:reco];
            }
        }
    }
}

Я разместил здесь демо: NoDoubleTapWebView

Надеюсь, это поможет.

3 голосов
/ 21 ноября 2011

iOS 5.0 +:

A UIWebView содержит UIScrollView для отображения своего содержимого и доступно свойству scrollView UIWebView.Итак, один из возможных способов сделать это - создать подкласс UIScrollView и переопределить -touchesShouldBegin:withEvent:inContentView.Вы можете получить количество нажатий на объект UITouch из его свойства tapCount, которое можно использовать для фильтрации жестов двойного нажатия и вызова супер-метода в противном случае.Это будет выглядеть примерно так:

-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view {
    UITouch * touch = [touches anyObject];    //Get a touch object
    if (2 == touch.tapCount) {    //If this is a double-tap...
        return NO;                //...don't begin touches
    }
    else {    //Otherwise, call the superclass' implementation
        return YES;
    }
}

Однако, чтобы установить представление прокрутки веб-представления в качестве пользовательского подкласса, вам также может понадобиться подкласс UIWebView (который обычно не одобряется).С учетом вышесказанного, вероятно, будет работать подкласс UIWebView и переопределение свойства scrollView.В файле интерфейса:

@interface MyAwesomeWebView : UIWebView {

}

@property (nonatomic, readonly, retain) MyAwesomeScrollView * scrollView;

@end

И в файле реализации:

@implementation

@dynamic scrollView

@end

Тем не менее, действуйте с осторожностью.

Pre iOS 5.0:

Как написал Алан Мур в комментариях, вы можете добавить прозрачное представление поверх веб-представления, захватывать все сенсорные события с помощью тестирования попаданий и перенаправлять сенсорные события в веб-представление, если нет двойного касания.

РЕДАКТИРОВАТЬ: обновленный ответ, чтобы включить предостережения о подклассе UIWebView и т. Д. РЕДАКТИРОВАТЬ 2: Включен второй ответ для предварительной версии iOS 5.0

0 голосов
/ 15 ноября 2011

Я думаю, что способ сделать это - добавить UITapGestureRecognizer поверх вашего UIWebView, тогда вы можете отфильтровать двойные касания по своему желанию.

Пример кода / обсуждение можно найти здесь:

Добавить UITapGestureRecognizer в UIWebView

...