Wie eine UIWebView mit einer Schließen-Schaltfläche oben laden?
-
28-09-2019 - |
Frage
Im Moment habe ich den folgenden Code, dass Lasten eine UIWebView von einer anderen Ansicht. Nun ist es trotzdem kann ich eine Schließen-Button hat?
- (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];
}
Ich werde eine Seite laden gebaut mit jQuery Mobile, so dass ein Schließen-Button innerhalb der Seite würde auch funktionieren. Aber auf einer Navigationsleiste wäre ideal. Btw, meine Anwendung funktioniert nicht Haben Sie einen UINavigationBar
Lösung
würde ich eine neue Unterklasse von UIViewController
schaffen, sagt WebViewController
mit einer Feder. Dann würde ich eine UINavigationBar
mit einem Schließen-Schaltfläche und einer UIWebView
hinzuzufügen. Dann wird Ihre Web-View-Controller zu zeigen, man kann so etwas tun:
WebViewController *webViewController = [[WebViewController alloc] init];
webViewController.loadURL = [NSURL URLWithString:@"http://www.google.com"];
[self presentModalViewController:webViewController animated:YES];
[webViewController release];
In Ihrem WebViewController
können Sie festlegen:
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic, retain) NSURL *loadURL;
- (IBAction)close:(id)sender;
und implementieren etwas wie folgt aus:
- (void)viewDidLoad {
[super viewDidLoad]
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:self.loadURL];
[self.webView loadRequest:urlRequest];
}
- (IBAction)close:(id)sender {
[self dismissModalViewControllerAnimated:YES];
}
Andere Tipps
Wenn Sie die UIWebView laden, könnten Sie einen JavaScript-Schnipsel auf den Inhalt laufen zuerst.
[webView stringByEvaluatingJavaScriptFromString:@"window.close = function() { window.location = 'app://close-webview'; };"];
Das Hijacking nur das normale Verhalten von window.close()
und gibt Ihnen die Chance den Anruf in Ihrem Objective-C zu fangen.
Dann in Ihrem UIWebViewDelegate könnten Sie hören, was Sie als die enge URL gewählt haben.
- (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;
}
Ein bisschen hackish, aber es würde die Web-Entwickler erlauben, um das Aussehen zu steuern und das Gefühl der Schließen-Schaltfläche aus dem HTML-Inhalt.