【问题标题】:Stop webViewDidFinishLoad from being called rapidly阻止 webViewDidFinishLoad 被快速调用
【发布时间】:2012-07-12 11:41:18
【问题描述】:

在我的webViewDidFinishLoad 方法中,我有以下代码:

- (void)webViewDidFinishLoad:(UIWebView *)webView {   
    if (hasPressed == 1) {
        hasPressed = 0;
        isBlocked = 0;
    }
    else if (hasPressed == 0 && hasDroppedDown == 0) {
        if (viewState != kStateWeather || isBlocked == 0) {
        [UIView animateWithDuration:0.5 
                              delay:0.0 options:UIViewAnimationCurveLinear animations:^{
                                  //Animations
                              }
                         completion:^(BOOL finished){
                             hasDroppedDown = 1;
                         }];
        }
    }
}

如您所见,如果此方法被快速调用,例如一个有重定向的网站,我的else if 中的else 变得无用。如何阻止它被如此迅速地调用?

【问题讨论】:

    标签: iphone objective-c cocoa-touch sdk


    【解决方案1】:

    很遗憾,你不能这样做。它会在UIWebView 开始加载新 URL 时调用。相反,你可以做一件事。 实现委托功能

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

    当一个新的框架即将开始在UIWebView 中加载时,将调用此委托。 您可以通过检查可以获取值的navigationType 来确定要加载哪种类型的请求

    UIWebViewNavigationTypeLinkClicked
    UIWebViewNavigationTypeFormSubmitted
    UIWebViewNavigationTypeBackForward
    UIWebViewNavigationTypeReload
    UIWebViewNavigationTypeFormResubmitted
    UIWebViewNavigationTypeOther
    

    注意:如果您允许 webview 加载页面,则返回 YES,否则返回 NO。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:
      - (void)main { //being called every 0.2
          t+=0.2;
      }
      - (void)webViewDidFinishLoad:(UIWebView *)webView {   
          loadImg.hidden = 1;
          m_activity.hidden= TRUE;     
          [m_activity stopAnimating];
          if (t>0.5) {
              [self finishedLoading];
              t=0;
          }
      }
      - (void)finishedLoading {
          if (hasPressed == 1) {
              hasPressed = 0;
              isBlocked = 0;
          }
          else if (hasPressed == 0 && hasDroppedDown == 0) {
              if (viewState != kStateWeather || isBlocked == 0) {
                  [UIView animateWithDuration:0.5 
                                        delay:0.0 options:UIViewAnimationCurveLinear animations:^{
                                            //Animations
                                        }
                                   completion:^(BOOL finished){
                                       hasDroppedDown = 1;
                                   }];
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 2011-08-27
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多