В UIWebview, как я могу обнаружить прикосновение?
Но не тогда, когда пользователь нажимает на какой-либо URL-адрес или прикасается к элементу управления.
Можно ли его обрабатывать?
В UIWebview, как я могу обнаружить прикосновение?
Но не тогда, когда пользователь нажимает на какой-либо URL-адрес или прикасается к элементу управления.
Можно ли его обрабатывать?
Использовать метод UIGestureRecognizerDelegate:
Добавить UIGestureRecognizerDelegate в файл декларации (т.е. ваш .h файл)
Шаг 1: просто установите делегат gestureRecognizer: (в .m файле viewDidLoad)
UITapGestureRecognizer *webViewTapped = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
webViewTapped.numberOfTapsRequired = 1;
webViewTapped.delegate = self;
[offScreenWebView addGestureRecognizer:webViewTapped];
[webViewTapped release];
Шаг 2: переопределить эту функцию: (в .m файле)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Шаг 3: Теперь реализуем функцию tapAction:
- (void)tapAction:(UITapGestureRecognizer *)sender
{
NSLog(@"touched");
// Get the specific point that was touched
CGPoint point = [sender locationInView:self.view];
}
Принятый ответ велик, если вам нужно только обнаружить ответвления. Если вам нужно обнаружить все касания, лучшим способом является создание нового подкласса UIView и размещение его над веб-просмотром. В подклассе вы можете обнаружить касания с помощью hitTest:
TouchOverlay.h
@class TouchOverlay;
@protocol TouchOverlayDelegate <NSObject>
@optional
- (void)touchOverlayTouched:(TV4TouchOverlay *)touchOverlay;
@end
@interface TouchOverlay : UIView
@property (nonatomic, unsafe_unretained) id <TouchOverlayDelegate> delegate;
@end
Touchoverlay.m
@implementation TouchOverlay
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
return self;
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *hitView = [super hitTest:point withEvent:event];
if (hitView == self) {
if (self.delegate && [self.delegate respondsToSelector:@selector(touchOverlayTouched:)]) {
[self.delegate touchOverlayTouched:self];
}
return nil; // Tell the OS to keep looking for a responder
}
return hitView;
}
@end
Все, что наследуется от UIResponder, может обрабатывать штрихи (также UIWebView). Прочтите документ: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIResponder_Class/Reference/Reference.html
Вам нужно будет использовать:
touchesBegan:withEvent:
Изменить: Добавление комментария для ясности -
Я считаю, что нет чистого способа сделать это, вы можете либо переопределить метод hittest с помощью метода Event, например this, либо сделать взломать вот так: переопределение UIView
Обратите внимание, что принятый ответ выше будет только фиксировать жесты касания (touchDown и touchUp без перетаскивания между ними), и эти жесты прокрутки будут игнорироваться.
В моих целях мне нужно было быть в курсе обо всех, и поэтому я добавил распознавателей жестов. (Обратите внимание, что, несмотря на бит поле, вы не можете OR
совместно использовать атрибуты распознавания жестов direction
, поэтому для обнаружения любых ударов требуется 4 распознавателя жестов).
// Note that despite being a bit field, you can't `OR` together swipe gesture
// recognizers' `direction` property, so 4 gesture recognizers are required
// to detect any swipe
for (NSNumber * swipeDirection in @[@(UISwipeGestureRecognizerDirectionUp), @(UISwipeGestureRecognizerDirectionDown), @(UISwipeGestureRecognizerDirectionLeft), @(UISwipeGestureRecognizerDirectionRight)]) {
UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(timerReset:)];
swipe.direction = [swipeDirection integerValue];
swipe.delegate = self;
[rootWebView addGestureRecognizer:swipe];
}
Вы хотите, чтобы вы переопределили параметры, которые появляются, когда они удерживают ссылку? Мне удалось заставить его работать с этим учебным пособием/гидом, но тот, который выложил здесь, все еще немного глючит, и вам нужно сделать небольшую настройку: http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/