2010-11-27 2 views
4

Ich habe derzeit den folgenden Code, der ein UIWebView aus einer anderen Ansicht lädt. Jetzt kann ich sowieso einen Knopf haben?Wie lade ich ein UIWebView mit einer Schließen-Schaltfläche oben?

- (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 mit jQuery Mobile gebaut laden, so dass ein Schließen-Button innerhalb der Seite funktionieren würde, auch in Ordnung. Aber auf einer Navigationsleiste wäre ideal. Btw, meine Anwendung funktioniert nicht eine UINavigationBar haben

Antwort

10

Ich würde erstellen Sie eine neue Unterklasse von UIViewController, sagen WebViewController mit einer Feder. Dann würde ich einen UINavigationBar mit einem Schließen-Knopf und einem UIWebView hinzufügen. Dann wird Ihr Web-View-Controller zu zeigen, können Sie so etwas wie:

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 definieren:

@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]; 
} 
+0

vielen Dank. Das hat mir geholfen. – gk1

+0

Ich bekomme Fehler für [super viewDidLoad]. Haben Sie den WebViewController als neue Klasse erstellt und eine Elternklasse von UIView oder NSObject eingefügt? –

5

Jedes Mal, wenn Sie laden Im UIWebView können Sie zuerst ein JavaScript-Snippet auf dem Inhalt ausführen.

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

Das ist nur das normale Verhalten von window.close() Hijacking und gibt Ihnen die Chance den Anruf in Ihrem Objective-C zu fangen.

Dann könnten Sie in Ihrem UIWebViewDelegate für alles, was Sie als die schließen URL gewählt haben, hören.

- (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.

+0

Wahrscheinlich eines der nützlichsten Dinge, die ich gesehen habe, wenn ich Javascript in Objective C mashte. Du hast deine 21 Punkte heute verdient @dillonchr.! – jcpennypincher

Verwandte Themen