iPhone UIWebView 播放 MP3。解雇协议?
Posted
技术标签:
【中文标题】iPhone UIWebView 播放 MP3。解雇协议?【英文标题】:iPhone UIWebView playing MP3. Dismissal protocol? 【发布时间】:2009-02-17 20:44:41 【问题描述】:所以我找不到任何有关如何执行此操作的文档,也许有人知道这里发生了什么。
我在我的应用程序中的 UITableView(带有 UINavigationController)中,并通过将 Web 视图的控制器推送到导航控制器的堆栈上来启动一个在互联网上加载 mp3 文件的 UIWebView。这很好用,文件在 Safari 使用的 quicktime 播放器中启动和播放。
问题是,一旦音频文件播放完毕,或者用户单击完成按钮,播放器就会被释放,并且应用程序会返回到带有我的导航栏的空 webView。我可以点击后退按钮回到我原来的 UITableView,但是那个空白屏幕很难看,需要离开。
那么,我可以使用什么操作将 [webviewcontroller.navigationcontroller popviewcontroller] 消息放入?它是否加载了其他类的实例(如 AVAudioPlayer)来播放音频?我需要子类化一些东西吗? Apple 关于如何在 UIWebView 中播放音频的文档基本上不存在。
【问题讨论】:
【参考方案1】:好的,所以我找到了一个更好、更简单的解决方案;我必须从我的应用程序中删除代码行才能使用。我只是使用了 UIWebview initWithFrame:CGRectMake(0.0,0.0,1.0,1.0),没有将其添加到视图中,然后调用了 NSURLRequest,并将其连接到我的按钮。媒体播放器自动全屏,无需调用导航控制器。
【讨论】:
不错的 hack,很高兴听到你修复它 这个技巧很有帮助,虽然在 ios 6.1 模拟器中我必须将它添加到视图中才能工作。 [self.view addSubview:self.webView];【参考方案2】:您可以通过一些 javascript 更改 location.href 来伪造它,然后执行以下操作:
- (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;
如果这不起作用,您可以随时进行轮询
stringByEvaluatingJavaScriptFromString
【讨论】:
哇,我不确定这是否是我所要求的。当 mp3 播放完毕时,它似乎触发了与单击“完成”按钮相同的事件,这两者都将用户带到一个空白的 web 视图。我想要做的是在视图控制器即将点击此页面时将视图控制器从堆栈中弹出。 是的,这有点像 hack,但基本上通过 javascript,你应该能够在定时器或事件上触发一些改变位置的东西,然后在委托中监听那个“事件”并弹出 【参考方案3】:这可能会为某人节省一两个小时:UIWebView 在设备和模拟器上的行为不同(大约 iOS 4.1)。
我只是花了一些时间试图关闭模拟器上的 webview,但它一直在设备上工作。
【讨论】:
以上是关于iPhone UIWebView 播放 MP3。解雇协议?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 UIWebView 方法在 iphone 本机应用程序中播放 vimeo 视频?