iOS - UIWebView - Нужно отправить форму, чтобы открыть в Safari - PullRequest
0 голосов
/ 28 сентября 2011

Я разрабатывал веб-приложение HTML5 / Javascript для платформы iOS. Я относительно новичок в Objective и XCode, но я знаю, как обходить программу. Я пытаюсь, чтобы UIWebView открывал форму после отправки (кнопка «Отправить») в Safari, а не открывал ее в текущем UIWebView.

Для открытия стандартных тегов <a> в Safari предлагается следующий код:

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

return YES;

}

(оригинальный пост здесь )

Я попытался адаптировать этот код специально для отправленных форм, например:

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

if ( inType == UIWebViewNavigationTypeFormSubmitted ) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return YES;
}
if ( inType == UIWebViewNavigationTypeFormResubmitted ) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return YES;
}

return YES;

}

И, к вашему сведению, я переключил возвращаемые значения каждого оператора IF на ДА / НЕТ, однако это не проблема ... Есть мысли? Код? Теория? Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2011

Следующие результаты достигли результата "Open in Safari", который я искал.

Сначала я реализовал протокол UIWebViewDelegate, добавив webView.delegate = self; в мое объявление viewDidLoad:

appViewController.m

- (void)viewDidLoad 
{
    [super viewDidLoad];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];  
    NSData *htmlData = [NSData dataWithContentsOfFile:filePath];  
    if (htmlData) {  
        NSBundle *bundle = [NSBundle mainBundle]; 
        NSString *path = [bundle bundlePath];
        NSString *fullPath = [NSBundle pathForResource:@"index" ofType:@"html" inDirectory:path];
        [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:fullPath]]];
        webView.delegate = self;
    }
}

Во-вторых, я добавил следующее:

-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request 
                                               navigationType:(UIWebViewNavigationType)navigationType 
{
    NSURL* url = [[request URL] retain];
    if (navigationType == UIWebViewNavigationTypeFormSubmitted || navigationType ==     UIWebViewNavigationTypeFormSubmitted)
    {
        return ![[UIApplication sharedApplication] openURL:url];
    }
    return YES;
}

Любопытно, что XCode вернул следующий флаг предупреждения:

предупреждение: класс appViewController не реализует протокол UIWebViewDelegate

Не знаю почему ... но!Теперь приложение открывает результаты отправленной формы в Safari.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...