我有一个代码(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)。
答案 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;
}
它对我有用。