Question

J'ai actuellement le code suivant qui charge un UIWebView d'une autre vue. Il est maintenant là, je peux quand même avoir un bouton de fermeture?

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

}

Je vais charger une page mobile construit en utilisant jquery, donc un bouton de fermeture dans la page serait également très bien. Mais sur une barre de navigation serait idéal. BTW, ma demande ne pas Ayez un UINavigationBar

Était-ce utile?

La solution

Je voudrais créer une nouvelle classe de sous UIViewController, disons WebViewController avec une pointe. Ensuite, je voudrais ajouter un UINavigationBar avec un bouton de fermeture et un UIWebView. Ensuite, pour montrer votre contrôleur de vue web que vous pouvez faire quelque chose comme:

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

Dans votre WebViewController vous pouvez définir:

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

- (IBAction)close:(id)sender;

et mettre en œuvre quelque chose comme ceci:

- (void)viewDidLoad {
  [super viewDidLoad]

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

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

Autres conseils

Chaque fois que vous chargez le UIWebView, vous pouvez exécuter un extrait de javascript sur le contenu d'abord.

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

Ce que le comportement détourne normal de window.close() et vous donne la chance d'attraper l'appel dans votre Objective-C.

Alors dans votre UIWebViewDelegate vous pouvez écouter ce que vous avez choisi comme la fin 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 peu hackish, mais il permettrait au développeur Web pour contrôler l'apparence et le toucher du bouton de fermeture de l'intérieur du contenu HTML.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top