首页 文章

在safari中打开UIWebView链接? UIWebView委托放置

提问于
浏览
1

我正试图在safari中打开来自UIWebView的链接,但到目前为止还没有成功 . 我很确定我对代表做错了 . 你们看看吗?

这是我在viewcontroller.m中的内容

(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)请求navigationType:(UIWebViewNavigationType)navigationType; {NSURL * requestURL = [[request URL] retain];
if(([[requestURL scheme] isEqualToString:@“http”])&&(navigationType ==
UIWebViewNavigationTypeLinkClicked)){
return![[UIApplication sharedApplication] openURL:[requestURL
自动释放]]; } [requestURL release];返回YES; }

抱歉格式化 . 无论如何,我的第一个问题是上面的webView是否应该与我在.h文件中声明的webView相同?

我的下一个问题是委托webview . 这是我的viewcontroller.h

http://jsfiddle.net/qJ8am/(我知道它不是javascript,但它在这里看起来比在blockquote中更好)

这是我放在我的.m viewdidload函数中(这是一个猜测我不知道放在哪里,或者即使它应该是自己的)

[webView setDelegate:self];

在运行此项目时,代码可能甚至不在那里,链接仍然在应用程序中打开,而不是在Safari中 . 你能帮我解决我做错了什么,或者给我一些关于如何设置NSLog的指示,以便我可以看到出了什么问题?谢谢你的帮助

1 回答

  • 1

    参考下面的代码:此代码是Apple示例代码的一部分http://developer.apple.com/library/ios/#samplecode/UICatalog/Introduction/Intro.html

    #import <UIKit/UIKit.h>
    
    @interface WebViewController : UIViewController <UITextFieldDelegate, UIWebViewDelegate>
    {
        UIWebView *myWebView;
    }
    
    @property (nonatomic, retain) UIWebView *myWebView;
    
    @end
    

    #import "WebViewController.h"
    #import "Constants.h"
    
    @implementation WebViewController
    
    @synthesize myWebView;
    
    - (void)dealloc
    {
        myWebView.delegate = nil;
        [myWebView release];
    
        [super dealloc];
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.title = NSLocalizedString(@"WebTitle", @"");
    
        CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
        webFrame.origin.y += kTopMargin + 5.0;  // leave from the URL input field and its label
        webFrame.size.height -= 40.0;
        self.myWebView = [[[UIWebView alloc] initWithFrame:webFrame] autorelease];
        self.myWebView.backgroundColor = [UIColor whiteColor];
        self.myWebView.scalesPageToFit = YES;
        self.myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
        self.myWebView.delegate = self;
        [self.view addSubview:self.myWebView];
    
        CGRect textFieldFrame = CGRectMake(kLeftMargin, kTweenMargin,
                                           self.view.bounds.size.width - (kLeftMargin * 2.0), kTextFieldHeight);
        UITextField *urlField = [[UITextField alloc] initWithFrame:textFieldFrame];
        urlField.borderStyle = UITextBorderStyleBezel;
        urlField.textColor = [UIColor blackColor];
        urlField.delegate = self;
        urlField.placeholder = @"<enter a URL>";
        urlField.text = @"http://www.apple.com";
        urlField.backgroundColor = [UIColor whiteColor];
        urlField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        urlField.returnKeyType = UIReturnKeyGo;
        urlField.keyboardType = UIKeyboardTypeURL;  // this makes the keyboard more friendly for typing URLs
        urlField.autocapitalizationType = UITextAutocapitalizationTypeNone; // don't capitalize
        urlField.autocorrectionType = UITextAutocorrectionTypeNo;   // we don't like autocompletion while typing
        urlField.clearButtonMode = UITextFieldViewModeAlways;
        [urlField setAccessibilityLabel:NSLocalizedString(@"URLTextField", @"")];
        [self.view addSubview:urlField];
        [urlField release];
    
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]]];
    }
    
    // called after the view controller's view is released and set to nil.
    // For example, a memory warning which causes the view to be purged. Not invoked as a result of -dealloc.
    // So release any properties that are loaded in viewDidLoad or can be recreated lazily.
    //
    - (void)viewDidUnload
    {
        [super viewDidUnload];
    
        // release and set to nil
        self.myWebView = nil;
    }
    
    
    #pragma mark -
    #pragma mark UIViewController delegate methods
    
    - (void)viewWillAppear:(BOOL)animated
    {
        self.myWebView.delegate = self; // setup the delegate as the web view is shown
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [self.myWebView stopLoading];   // in case the web view is still loading its content
        self.myWebView.delegate = nil;  // disconnect the delegate as the webview is hidden
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        // we support rotation in this view controller
        return YES;
    }
    
    // this helps dismiss the keyboard when the "Done" button is clicked
    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [textField resignFirstResponder];
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[textField text]]]];
    
        return YES;
    }
    
    
    #pragma mark -
    #pragma mark UIWebViewDelegate
    
    - (void)webViewDidStartLoad:(UIWebView *)webView
    {
        // starting the load, show the activity indicator in the status bar
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView
    {
        // finished loading, hide the activity indicator in the status bar
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    }
    
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    {
        // load error, hide the activity indicator in the status bar
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    
        // report the error inside the webview
        NSString* errorString = [NSString stringWithFormat:
                                 @"<html><center><font size=+5 color='red'>An error occurred:<br>%@</font></center></html>",
                                 error.localizedDescription];
        [self.myWebView loadHTMLString:errorString baseURL:nil];
    }
    
    @end
    

相关问题