Как загрузить UIWebView с кнопкой закрытия сверху? - PullRequest
4 голосов
/ 27 ноября 2010

В настоящее время у меня есть следующий код, который загружает UIWebView из другого представления.Теперь есть ли у меня кнопка закрытия?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectMake(0,0,320,480)];
    [self.view addSubview:webView];
    NSURLRequest *urlRequest;
    NSURL *urlforWebView;
    urlforWebView=[NSURL URLWithString:@"http://www.google.com"];
    urlRequest=[NSURLRequest requestWithURL:urlforWebView];
    [webView loadRequest:urlRequest];

}

Я собираюсь загрузить страницу, созданную с помощью jquery mobile, поэтому кнопка закрытия внутри страницы также будет работать нормально.Но на панели навигации было бы идеально.Кстати, мое приложение не имеет UINavigationBar

Ответы [ 2 ]

11 голосов
/ 27 ноября 2010

Я бы создал новый подкласс UIViewController, скажем WebViewController с кончиком. Тогда я бы добавил UINavigationBar с кнопкой закрытия и UIWebView. Затем, чтобы показать свой контроллер веб-просмотра, вы можете сделать что-то вроде:

WebViewController *webViewController = [[WebViewController alloc] init];
webViewController.loadURL = [NSURL URLWithString:@"http://www.google.com"];
[self presentModalViewController:webViewController animated:YES];
[webViewController release];

В вашем WebViewController вы можете определить:

@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic, retain) NSURL *loadURL;

- (IBAction)close:(id)sender;

и реализовать что-то вроде этого:

- (void)viewDidLoad {
  [super viewDidLoad]

  NSURLRequest *urlRequest = [NSURLRequest requestWithURL:self.loadURL];
  [self.webView loadRequest:urlRequest];
}

- (IBAction)close:(id)sender {
  [self dismissModalViewControllerAnimated:YES];
}
5 голосов
/ 26 марта 2013

Каждый раз, когда вы загружаете UIWebView, вы можете сначала запустить фрагмент javascript для содержимого.

[webView stringByEvaluatingJavaScriptFromString:@"window.close = function() { window.location = 'app://close-webview'; };"];

Это просто перехватывает нормальное поведение window.close() и дает вам шанс перехватить вызов в вашем Objective-C.

Тогда в вашем UIWebViewDelegate вы можете прослушивать все, что вы выбрали в качестве близкого URL.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if([request.URL.absoluteString isEqualToString:@"app://close-webview"]) {
        webView.hidden = YES;
        // or whatever you want to do to remove the UIWebView...
        return NO;
    }
    return YES;
}

Немного хакерский, но он позволил бы веб-разработчику контролировать внешний вид кнопки закрытия изнутри HTML-контента.

...