Открытие ссылок UIWebView в сафари?UIWebView Размещение делегатов - PullRequest
1 голос
/ 06 октября 2011

Я пытаюсь открыть ссылки из UIWebView в Safari, но пока безуспешно.Я совершенно уверен, что делаю что-то не так с делегатами.Ребята, можете посмотреть?

Вот что у меня есть в моем viewcontroller.m

(BOOL).: (UIWebViewNavigationType) navigationType;{

NSURL *requestURL =[[request URL]retain];
if(([[requestURL scheme]isEqualToString:@"http"])&&(navigationType == 
UIWebViewNavigationTypeLinkClicked)){
return ![[UIApplication sharedApplication]openURL:[requestURL

авто-релиз]];} [requestURL release];вернуть ДА;}

извините за форматирование.В любом случае, мой первый вопрос: должен ли веб-вид, описанный выше, быть таким же, как веб-вид, который я объявил в своем файле .h?

Мой следующий вопрос касается делегирования веб-вида.Это мой viewcontroller.h

http://jsfiddle.net/qJ8am/ (я знаю, что это не javascript, но здесь он выглядит лучше, чем в цитате)

и вот что я добавил в свой.m viewdidload function (это было предположение, что я не знал, куда его поместить, или даже если оно должно быть self)

[webView setDelegate: self];

При запуске этого проекта код может даже отсутствовать, ссылки все еще открыты в приложении, а не в Safari.Ребята, можете ли вы помочь мне с тем, что я делаю неправильно, или дать несколько советов о том, как настроить NSLog, или что-то еще, чтобы я мог видеть, что идет не так?Спасибо за вашу помощь

1 Ответ

1 голос
/ 06 октября 2011

см. Код ниже: этот код является частью кода 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
...