2

UIWebview(広告表示のようなもの)をクリックすると、サファリで1つのリンクを開こうとしています。次のコードを使用していますが、一部のリンク (すべてではない) の UIWebview 内で開いている webview をクリックすると、何が起こりますか。

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


    if (webView1==webview) {

        if (UIWebViewNavigationTypeLinkClicked == navigationType) {

            [[UIApplication sharedApplication] openURL:[request URL]];
            return NO;
        }

        return YES;

    }
}

ここで何が起こるかというと、その UIWebView にテキスト リンクがあれば正しく開きますが、画像付きの UIWebview の場合は、新しいブラウザではなく同じ UIWebview で開きます。

私の現在のコード

     - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.

        [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.example.com/files/ad.htm"]]];
    [_webView setBackgroundColor:[UIColor clearColor]];
    [_webView setOpaque:NO];
    _webView.scrollView.bounces = NO;


    }

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

    return YES;
}

アプリをロードすると、広告が表示されます

その広告(UIWebview)をクリックすると、ブラウザではなく同じUIWebviewで開きます

4

1 に答える 1

0

これらの画像はアンカータグを使用してリンクされているようです...

これを試して...

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

    static NSString *reguler_exp = @"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9])[.])+([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])$";
//Regular expression to detect those certain tags..You can play with this regular expression based on your requirement..

    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", reguler_exp];
//predicate the matched tags.

    if ([resultPredicate evaluateWithObject:request.URL.host]) {
        [[UIApplication sharedApplication] openURL:request.URL];
        return NO; 
    } else {
        return YES; 
    }
}

EDIT : このデリゲート メソッドが初めて呼び出されることを許可しないでください。webview を初めてロードするときに呼び出されないロジックを追加します。

( SOP の新しい要件、以下のコメントを参照)

uiwebviewでタッチを検出する方法、

1) webview にタップジェスチャーを追加します (その前に、viewcontroller.h に UIGestureRecognizerDelegate を追加します)。

例:

UITapGestureRecognizer* singleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];
singleTap.numberOfTouchesRequired=1;
singleTap.delegate=self;
[webview addGestureRecognizer:singleTap];

2)次に、このデリゲート メソッドを追加します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    //return YES,if you want to control the action natively;
    //return NO,in case your javascript does the rest.
}

:タッチがネイティブかhtmml(javascript)かを確認したい場合は、javascriptイベントの処理などについて、ここの素敵な小さなチュートリアルを確認してください..

于 2013-08-22T08:30:58.947 に答える