2013-10-24 4 views
0

У меня есть UIWebView для отображения статей. У меня есть UIWebView для отображения статей HTML. Когда пользователь коснется некоторой области в UIWebView, отобразится UIMenuController. Затем пользователь выбирает кнопку примечания, на которой отображается UITextView. Как получить контактное местоположение?Получить точку касания

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 

    // Get the specific point that was touched 
    CGPoint point = [touch locationInView:wbCont]; 
    NSLog(@"X location: %f", point.x); 
    NSLog(@"Y Location: %f",point.y); 

} 


- (void)note:(id)sender { 


} 
+0

Код, который вы опубликовали, не работает? – johnyu

+0

есть. Он ничего не показывает в nslog – user2807197

+0

Является ли касание работой в симуляторе? – user2807197

ответ

4

UIWebview обернут внутри UIScrollView. Поэтому события касания не проходят в UIView, где ваш метод получает события касания.

Для вашего UIViewController он должен реализовать UIGestureRecognizerDelegate

Затем добавить жест в свой WebView:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTest:)]; 
[tap setDelegate:self]; 
[self.yourwebview.scrollView addGestureRecognizer:tap]; 

Следующая:

- (void)tapTest:(UITapGestureRecognizer *)sender { 
    NSLog(@"%f %f", [sender locationInView:self.yourwebview].x, [sender locationInView:self.yourwebview].y); 
} 

Edit:

shouldRecognizeSimultaneouslyWithGestureRecognizer должен вернуть YES, как Что ж.

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

It is working .... – user2807197

+0

Как сохранить эти координаты и получить их позже? – user2807197

1

Попробуйте это: -

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    firstTouch = [touch locationInView:self.view]; 

    NSLog(@" CHECKING CGPOINT %@", NSStringFromCGPoint(firstTouch)); 


} 

отлично работает для меня ;-)

+0

Ничего не приходит. – user2807197

+0

@ user2807197: убедитесь, что использование включило UIGestureRecognizerDelegate в ваш .h-файл и firsttouch больше похож на cgpoint firstTouch.Это работает отлично для меня. – Rana

+0

+1 для NSStringFromCGPoint –

0
-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event 

{ 

    NSSet *touches = [event allTouches]; 

    UITouch *touch = [touches anyObject]; 

    //UITouch *touch = [[event touchesForView:textview] anyObject]; 
    CGPoint location = [touch locationInView: wbCont]; 

    CGPoint previousLocation = [touch previousLocationInView:textview]; 

} 
+0

Является ли касание работой в симуляторе? – user2807197

+0

Это не работает. – user2807197

0

Там только один действительно отказоустойчивый способ сделать это (что я знаю):

@interface MyWebView : UIWebView 
@end 

@implementation MyWebView 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    if ([self pointInside:point withEvent:event]) 
    { 
     NSLog(@"Touched inside!"); 
    } 

    return [super hitTest:point withEvent:event]; 
} 

@end 

Веб-представления чрезвычайно сложны, поэтому переопределение ose UIResponder методы или добавление распознавателей жестов не будут работать. К сожалению, hitTest:withEvent: вызывается 3 раза на каждом касании, поэтому вам придется иметь дело с этим.

+0

Является ли касание работой в симуляторе? – user2807197

+0

Да, это не проверено на устройстве. –

0
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

UITouch *touch = [touches anyObject]; 
    NSLog(@"X location: %f",touch.view.position.x); 
    NSLog(@"Y Location: %f",touch.position.y); 
} 
Смежные вопросы