UIWebView新窗口请求不起作用

时间:2015-09-14 20:03:35

标签: ios objective-c uiwebview

我有一个代码(objective-c),当点击uiwebview中某个字符串的链接时,该代码应打开一个新窗口(viewcontroller)。但它没有用。

这里是.m文件中的代码:

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

    NSURL *url = request.URL;
    NSString *urlString = url.absoluteString;

    //Check if special link
    if ( [ urlString isEqualToString: @"http://google.com/" ] ) {
        //Here present the new view controller
        ViewController *ViewController8 = [[ViewController alloc] init];
        [self presentViewController:ViewController8 animated:YES completion:nil];

        return NO;
    }

    return YES;

}

新的viewcontroller子类名称是:ViewController8和UIWebView子类是:webView2

这里是.h文件中的代码:

 #import <UIKit/UIKit.h>

    @interface ViewController8 : UIViewController

    @end

    @interface ViewController : UIViewController{
        IBOutlet UIScrollView *scrollView;
        IBOutlet UIButton *openMenu;
        int draw1;
    }
    - (IBAction)OpenMenu:(id)sender;

    @property (retain, nonatomic) IBOutlet UIScrollView *scrollView;


    @end

如何修复它,以便在点击uiwebview中某个字符串的链接时打开一个新窗口(viewcontroller)。

2 个答案:

答案 0 :(得分:0)

首先,您确定了shouldStartLoadWithRequest委托方法的方法签名吗?

你真的覆盖默认方法来调用它:

- (BOOL)webView2:(UIWebView *)webView2 shouldStartLoadWithRequest:(NSURLRequest *)请求navigationType:(UIWebViewNavigationType)navigationType

???

或者你应该用“webView”代替“webview2”吗?

即使你这样做,命名惯例也会非常混乱。

默认实现是针对名为“UIWebView”的类,但委托方法引用“webView”。

但在您的情况下,您有一个名为“webView2”的类,并且您正在调用应该命名的委托方法:

- (BOOL)webView2:(webView2 *)webView2 shouldStartLoadWithRequest ...

看起来不正确。

不知怎的,我认为问题在那里混淆了。但也许我错了。所以第二个问题是,你是否在你的shouldStartLoadWithRequest方法的开头设置了一个断点,看它是否被调用?

当你说它“不起作用”时,这是什么意思?它到底有多远?

如果它实际上到达方法,那么问题可能是它包含的URL的格式与您正在寻找的字符串不同。也许尾随的'/'不在那里或“www。” 那里。

编辑:

我会尝试这样的事情:

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

NSRange rangeOfGoogle = [request.URL.absoluteString rangeOfString:@"google.com"];

//Check if special link
if (rangeOfGoogle.location != NSNotFound) {
    //Here present the new view controller
    ViewController8 *viewController = [[ViewController8 alloc] initWithNibName:nil bundle:nil];
    [self presentViewController:viewController animated:YES completion:nil];

    return NO;
    }

    return YES;

}

答案 1 :(得分:0)

我希望这对你有用

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

if (navigationType == UIWebViewNavigationTypeLinkClicked) {

NSURL *url = request.URL;
NSString *urlString = url.absoluteString;

//Check if special link
if ( [ urlString isEqualToString: @"http://google.com/" ] ) {

    //Here present the new view controller

    ViewController *ViewController8 = [[ViewController alloc] init];
    [self presentViewController:ViewController8 animated:YES completion:nil];

    return NO;
}

}

return YES;

}

它对我有用。