Обработка касаний в UIWebview

«Экземпляр» обычно - «методы экземпляра», «переменные экземпляра» и т. Д. Нестатические тоже работают, если вы находите это проще.

Я не уверен, что действительно поместил бы все эти регионы в ...

36
задан DocMax 10 January 2013 в 07:22
поделиться

5 ответов

Вы имеете в виду, что ваша реализация подкласса не вызывается при вызове touchesBegan, touchesMoved и touchesEnded?

Похоже, проблема в том, как вы? мы создали экземпляр объекта. Думаю, требуются более подробные сведения.

(комментарии взяты из формы)

Заголовочный файл

#import <UIKit/UIKit.h> 

@interface MyWebView : UIWebView { } @end 

Файл реализации

#import "MyWebView.h" 

@implementation MyWebView 

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { } return self; 
} 

- (void)drawRect:(CGRect)rect { 
    NSLog(@"MyWebView is loaded"); 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
   NSLog(@"touches began"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"Touches ended");     
} 

- (void)dealloc { 
   [super dealloc]; 
} 

@end
0
ответ дан 27 November 2019 в 05:44
поделиться

Я не уверен, что это то, что вы хотите (это не то, о чем вы просили, но это может сработать в зависимости от вашей конечной игры), но вместо этого вы можете интерпретировать штрихи в JavaScript изнутри UIWebView и получить javascript для выполнения

document.location='http://null/'+xCoord+'/'+yCoord; // Null is arbitrary.

Затем вы можете уловить это с помощью метода делегата UIWebView

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

. И если request.URL.host (или что-то еще) isEqualToString: @ "null" возьмет соответствующий действие (и верните NO вместо YES). Вы даже можете добавить JS на каждую страницу, выполнив что-нибудь вроде:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  [webView stringByEvaluatingJavaScriptFromString:@"window.ontouchstart=function(/* ... */);"];
}

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

5
ответ дан 27 November 2019 в 05:44
поделиться

Я бы попытался переопределить -sendEvent: в UIWindow, чтобы узнать, можете ли вы перехватить эти события касания.

0
ответ дан 27 November 2019 в 05:44
поделиться

Следуя тому, что сказал Unfalkster, вы можете использовать метод hitTest для достижения что вы хотите, но вам не нужно создавать подкласс UIWindow. Просто поместите это в свой подкласс веб-представления. Вы получите предупреждение во время компиляции, но оно работает:

- (void)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (event.type == UIEventTypeTouches) {

        // get location info
        CGFloat x = point.x;
        CGFloat y = point.y;

        // get touches
        NSSet *touches = [event allTouches];

        // individual touches
        for (UITouch *touch in touches) {

            if (touch.phase == UITouchPhaseBegan) {
                // touches began

            } else if (touch.phase == UITouchPhaseMoved) {

            }

            // etc etc
        }
    }

    // call the super
    [super hitTest:point withEvent:event];
}

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

0
ответ дан 27 November 2019 в 05:44
поделиться

Вы можете поместить UIView поверх UIWebView и перекрыть touchDidBegin и т. Д., А затем отправить их в свой веб-просмотр. Пример:

Пользователь касается вашего UIView , что вызывает

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{  
    // Execute your code then send a touchesBegan to your webview like so:
[webView touchesBegan:touches withEvent:event];
return;
}

, что ваш UIView должен быть поверх веб-просмотра.

7
ответ дан 27 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: