2009-02-17 18 views
5

So kann ich keine Dokumentation finden, wie das geht, vielleicht weiß jemand, was hier vor sich geht.iPhone UIWebView spielt MP3. Entlassungsprotokoll?

Ich bin in einer UITableView (mit einem UINavigationController) in meiner Anwendung und starte ein UIWebView, das eine MP3-Datei im Internet lädt, indem der Controller der Web View auf den Stack des Navigationscontrollers geschoben wird. Das funktioniert super, die Datei startet und spielt in dem von Safari verwendeten Quicktime-Player.

Das Problem ist, dass sobald die Audiodatei abgespielt ist, oder der Benutzer auf die Schaltfläche Fertig klickt, der Player freigegeben wird und die App mit meiner Navigationsleiste zu einem leeren WebView zurückkehrt. Ich kann die Zurück-Taste drücken, um zu meinem ursprünglichen UITableView zurückzukehren, aber dieser leere Bildschirm ist hässlich und muss gehen.

Also, welche Aktion kann ich verwenden, um eine Nachricht [webviewcontroller.navigationcontroller popviewcontroller] in? Wird eine Instanz einer anderen Klasse (wie AVAudioPlayer) geladen, um das Audio abzuspielen? Muss ich etwas unterklassifizieren? Apples Dokumentation über die Wiedergabe von Audio in UIWebView ist im Grunde nicht existent.

Antwort

1

können Sie fälschen, indem Sie einige location.href Javascript-Änderung ist, und dann so etwas wie dies zu tun:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request 
     navigationType:(UIWebViewNavigationType)navigationType { 

    NSString* path=[[request URL] relativePath]; 
    BOOL shouldContinue=YES; 

    if ([path isEqualToString:@"/_my_custom_link"]) 
    { 
     shouldContinue=NO; 
     // do magical stuff 
    } 
    return shouldContinue; 
} 

Wenn das nicht funktioniert, können Sie immer es durch einen tun abfragen kann

stringByEvaluatingJavaScriptFromString 
+0

Whoa, ich bin mir nicht sicher, ob das ist, wonach ich gefragt habe. Wenn die MP3-Wiedergabe beendet ist, scheint es dasselbe Ereignis auszulösen wie das Klicken auf die Schaltfläche "Ist fertig", die beide den Benutzer zu einer leeren Webansicht führen. Ich möchte den View-Controller vom Stapel entfernen, wenn er diese Seite gerade erreicht. –

+0

Ja, es ist ein bisschen ein Hack, aber im Grunde durch Javascript sollten Sie in der Lage sein, etwas auf einen Timer oder ein Ereignis, das den Ort ändert, feuern dann für das "Ereignis" in der Delegierten und Pop – slf

5

Ok, also habe ich eine viel bessere, viel einfachere Lösung gefunden; eine, die ich Codezeilen aus meiner App löschen musste, um zu verwenden. Ich habe gerade UIWebview initWithFrame verwendet: CGRectMake (0.0.0.0,1.0,1.0), habe es nicht zur Ansicht hinzugefügt, dann NSURLRequest genannt und es an meine Schaltfläche angehängt. Der Medienplayer wird vollautomatisch angezeigt, und der Nav-Controller muss nicht aufgerufen werden.

+0

nice hack, froh, Sie zu hören behebt es – slf

+1

Dieser Tipp war hilfreich, obwohl in iOS 6.1 Simulator ich es zur Ansicht hinzufügen musste, damit es funktioniert. [self.view addSubview: self.webView]; – DenVog

1

Dies könnte jemand eine Stunde oder zwei speichern: das UIWebView verhält sich auf dem Gerät und auf dem Simulator anders (etwa iOS 4.1).

Ich habe gerade einige Zeit damit verbracht, das Webview auf dem Simulator zu löschen, aber es funktionierte die ganze Zeit auf dem Gerät.

Verwandte Themen