2009-02-17 16 views
5

Więc nie mogę znaleźć żadnej dokumentacji, jak to zrobić, może ktoś wie, co tu się dzieje.iPhone UIWebView odtwarzający MP3. Odrzucenie protokołu?

Jestem w UITableView (z UINavigationController) w mojej aplikacji i uruchomienie UIWebView, który ładuje plik mp3 w Internecie, przesuwając kontroler Web View na stos kontrolera nawigacyjnego. Działa to świetnie, plik uruchamia się i odtwarza w odtwarzaczu QuickTime, z którego korzysta Safari.

Problem polega na tym, że po zakończeniu odtwarzania pliku audio lub kliknięciu przycisku "Wykonaj" odtwarzacz zostanie zwolniony, a aplikacja powróci do pustego widoku z mojego paska nawigacji. Mogę nacisnąć przycisk Wstecz, aby powrócić do mojego oryginalnego UITableView, ale ten pusty ekran jest brzydki i musi iść.

Jaką akcję można zastosować, aby umieścić wiadomość [webviewcontroller.navigationcontroller popviewcontroller]? Czy ładowanie instancji innej klasy (np. AVAudioPlayer) w celu odtwarzania dźwięku? Czy muszę coś podklasować? Dokumentacja Apple na temat tego, jak odtwarza dźwięk w UIWebView jest zasadniczo nieistniejąca.

Odpowiedz

1

Można udawać mając pewne javascript zmiany location.href, a potem robi coś takiego:

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

Jeśli to nie pomoże, zawsze można odpytywać go wykonując

stringByEvaluatingJavaScriptFromString 
+0

whoa, nie jestem pewien, czy o to właśnie prosiłem. Po zakończeniu odtwarzania pliku mp3 wydaje się, że uruchamia ono to samo zdarzenie, co kliknięcie przycisku "zakończyło się", co spowoduje przeniesienie użytkownika do pustego widoku WWW. Co chcę zrobić, to wysunąć kontroler widoku ze stosu, gdy mają zamiar trafić tę stronę. –

+0

Tak, to trochę hack, ale w zasadzie za pomocą javascript powinieneś być w stanie wystrzelić coś na timera lub wydarzenie, które zmienia lokalizację, a następnie słuchać tego "wydarzenia" w delegata i pop – slf

5

Ok, więc znalazłem znacznie lepsze, znacznie prostsze rozwiązanie; jeden, który musiałem usunąć linie kodu z mojej aplikacji do użycia. Właśnie użyłem UIWebview initWithFrame: CGRectMake (0.0,0.0,1.0,1.0), nie dodałem go do widoku, a następnie wywołałem NSURLRequest i podpiąłem go do mojego przycisku. Odtwarzacz multimedialny wyświetla ekrany w sposób automatyczny i nie ma potrzeby wywoływania kontrolera nawigacji.

+0

fajny hack, cieszę się, że cię słyszę naprawiono to – slf

+1

Ta wskazówka była pomocna, chociaż w symulatorze iOS 6.1 musiałem dodać go do widoku, aby działał. [self.view addSubview: self.webView]; – DenVog

1

To może uratować kogoś godzinę lub dwie: UIWebView zachowuje się inaczej na urządzeniu i na symulatorze (około iOS 4.1).

Właśnie spędziłem trochę czasu próbując odrzucić webview na symulatorze, ale cały czas pracowałem nad urządzeniem.

Powiązane problemy