Система просмотра навигации с проблемой веб-просмотра с касаниями!

Привет, я все обыскал, и я не понял этого!

У меня есть контроллер панели вкладок с 5 элементами управления навигацией, в одном из элементов управления навигацией у меня есть представление с табличным представлением внутри, и когда я щелкаю этот элемент, я нажимаю новое представление, это представление имеет

  view
     -webview
     -view

я создаю это второе представление (прозрачное), потому что мне нужно обработать одно касание, чтобы скрыть панель инструментов и панель навигации, а веб-просмотр поглощал все прикосновения! Я помещаю это представление и реализую его на контроллере представления.

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
 UITouch* touch = [touches anyObject];
 if(touch.tapCount == 2){
  [NSObject cancelPreviousPerformRequestsWithTarget:self];
 } 
 [[wv.subviews objectAtIndex:0] touchesBegan:touches withEvent:event];
 [super touchesBegan:touches withEvent:event];
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
 [[wv.subviews objectAtIndex:0] touchesMoved:touches withEvent:event];
 [super touchesMoved:touches withEvent:event];
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
 UITouch* touch = [touches anyObject];
 if(touch.tapCount == 1){
  [self performSelector:@selector(hideBars) withObject:nil afterDelay:0.3];
 }
 [[wv.subviews objectAtIndex:0] touchesEnded:touches withEvent:event];
 [super touchesEnded:touches withEvent:event];
}

-(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
 [[wv.subviews objectAtIndex:0] touchesCancelled:touches withEvent:event];
 [super touchesCancelled:touches withEvent:event];
}

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


person Gonçalo Falcão    schedule 25.11.2009    source источник


Ответы (1)


Хорошо, я не решил свою проблему, но у меня есть обходной путь для этой ситуации.

UIWebView получает все касания и не передает их другим представлениям, только если вы отключите взаимодействие с пользователем, а мы этого не хотим. И вы не можете переопределить touchesBegan и все такое в реализации UIWebView. Итак, каково решение?

Как я уже упоминал, если вы поместите UIView поверх UIWebView, вы можете получить прикосновения и передать их в веб-просмотр, но это не идеально также, потому что вы не можете нажимать на ссылки, масштабировать и все такое прочее, вы только умеет прокручивать! а это отстой!

Soooo, мой обходной путь:

Избавьтесь от UIView, который находится поверх UIWebView, а теперь волшебство с помощью javascript!

В вашем html вам нужно сделать несколько трюков, во-первых: создать div, охватывающий всю страницу, сразу после тела, и установить отступы и поля на 0! и поместите это в div:

Что это делает, так это создание и событие, когда вы нажимаете на div, если div заполняет весь веб-просмотр, всякий раз, когда вы нажимаете, вы вызываете это событие, и это событие изменяет адрес, и если вы устанавливаете свой контроллер просмотра как делегат веб-просмотра , делегат вызовет этот метод:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString* scheme = request.URL.scheme;
    NSString* query = request.URL.query;
    NSLog(@"%@, %@", scheme, query);
    if ([scheme compare:@"file"]==0){
        if ([query isEqualToString:@"hideBars"]){
            [self hideBars];
            return NO;
        }
    }

    return YES;
}

вот где происходит волшебство, строка запроса будет сопровождаться строкой hideBars, если вы щелкнете в любом месте! Так что это вызовет мою функцию hideBars! если вы нажмете на ссылку, запрос придет с адресом ссылки, так что это тоже работает! Zoom не вызывает этот метод, так что все отлично!

Если у вас есть какие-либо вопросы, просто напишите мне на goncalo.falcao @waveweb2. ком

person Gonçalo Falcão    schedule 25.11.2009