Comment charger un UIWebView avec un bouton Fermer sur le dessus?
-
28-09-2019 - |
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
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.