Pregunta

Actualmente tengo el siguiente código que carga un UIWebView desde otro punto de vista. Ahora es Hay alguna forma de tener un botón de cierre?

- (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];

}

Me voy a cargar una página construido usando jQuery Mobile, por lo que un botón de cierre dentro de la página que también funcionan bien. Pero en una barra de navegación sería lo ideal. Por cierto, mi solicitud hace no Tiene un UINavigationBar

¿Fue útil?

Solución

Yo crearía una nueva subclase de UIViewController, WebViewController decir con una punta. A continuación, me gustaría añadir una UINavigationBar con un botón de cierre y un UIWebView. A continuación, para mostrar su controlador de vista web se puede hacer algo como:

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

En su WebViewController puede definir:

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

- (IBAction)close:(id)sender;

e implementar algo como esto:

- (void)viewDidLoad {
  [super viewDidLoad]

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

- (IBAction)close:(id)sender {
  [self dismissModalViewControllerAnimated:YES];
}

Otros consejos

Cada vez que se carga el UIWebView, podría ejecutar un fragmento de código JavaScript en el contenido en primer lugar.

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

Eso sólo secuestra el comportamiento normal de window.close() y le da la oportunidad de recuperar la llamada en su Objective-C.

A continuación, en su UIWebViewDelegate que podía escuchar lo que usted eligió como el cierre 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;
}

Un poco hacker, pero permitiría que el desarrollador web para controlar la apariencia del botón de cierre desde dentro del contenido HTML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top