TapDetectingWindow на WebView не работает должным образом - PullRequest
0 голосов
/ 25 января 2012

В моем приложении я использую TapDetectingWindow для обнаружения касаний в UIWebView (точно так же, как подробно описано в http://mithin.in/2009/08/26/detecting-taps-and-events-on-uiwebview-the-right-way). Я использовал его в одном View Controller, как было предложено со ссылкой в ​​заголовочном файле, а затем в файле реализации, например

- (id)init {
    self = [super init];
    if (self) {
          tapDetectingWindow = (TapDetectingWindow *)[[UIApplication sharedApplication].windows objectAtIndex:0];                                               //mWindow, variable reference to TapDetectingWindow
        tapDetectingWindow.viewToObserve = webView;  
        tapDetectingWindow.controllerThatObserves = self;    

        webView = [[UIWebView alloc] init];
        [webView setFrame:CGRectMake(0, 0, 340, 1900)];
        [webView setTag:1];
        [webView addSubview:keyboardText];
        [webView setUserInteractionEnabled:NO];
        [webView setDelegate:self];
        [webView setOpaque:0.0];

       [webView loadHTMLString:htmlString baseURL:NULL];
        [self.view  addSubview:webView];

        keyboardText = [[UITextField alloc] init];
        keyboardText.autocorrectionType = UITextAutocorrectionTypeNo;   
        [keyboardText setDelegate:self];
        [self.view addSubview:keyboardText];

    }
    return self;
}

но мое приложение падает на
"tapDetectingWindow.viewToObserve = webView"
с отчетом * - [UIWindow setViewToObserve:]: нераспознанный селектор отправлен в экземпляр 0x4a26b90

Может ли кто-нибудь помочь мне ...

Ответы [ 2 ]

4 голосов
/ 25 января 2012

Проблема не в приведенном выше коде.Это связано с введением нового свойства в iOS 5.0 с окном имени по протоколу UIApplicationDelegate.

Измените имя своего окна в файле appdelegate.

В .h файле

@class WebViewController;
@class TapDetectingWindow;
@interface test_touchAppDelegate : NSObject <UIApplicationDelegate>
{
  TapDetectingWindow *myWindow;
  WebViewController *viewController;
}
@property (retain, nonatomic) TapDetectingWindow *myWindow;
@property (retain, nonatomic) WebViewController *viewController;
@end

В.m файл

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.myWindow = [[TapDetectingWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  self.viewController = [[WebViewController alloc] init]; 
  self.myWindow.rootViewController = self.viewController;
  [self.myWindow makeKeyAndVisible];
  return YES;
}

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

0 голосов
/ 17 октября 2012

То, что сказал вам Апурв, правильно и работает как заклинание. Я вижу, вы просите альтернативный метод для распознавания жестов в веб-просмотре (я предполагаю, что это означает нажать на UIWebView.). Ответ - да, вы должны использовать «UIWebView метод делегата».

#pragma mark -
#pragma mark uiwebview delegate

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if(navigationType==UIWebViewNavigationTypeLinkClicked){
        NSURL *URL = [request URL];
        if(URL){
            [[UIApplication sharedApplication] openURL:URL];
            return NO;
        }
    }
    return YES;
}

Приведенный выше код, когда вы нажимаете UIWebView, откроет ссылку UIWebView, по которой вы щелкнули. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...