我在其中一个标签中运行了一个AVAudioPlayer实例。它通过IBAction激活。
我想在用户点击其他标签时停止播放音乐。
我将如何做到这一点?
我试过了theAudio.stop;在viewDidLoad中,但是没有用。
答案 0 :(得分:0)
在你的UITabBarControllerDelegate中实现以下方法;
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
只要用户在控制器中选择新视图,就会调用此方法。
我认为您还可以在播放音频的UIViewController中覆盖以下方法
-(void) viewDidDisappear:(BOOL)animated
答案 1 :(得分:0)
将UITabBarControllerDelegate连接到您的主视图,然后收听(void)tabBarController:(UITabBarController *)tabBarController didSelectItem:(UITabBarItem *)item
当你得到那个事件时,找到对象模型中的玩家并停止它。
答案 2 :(得分:0)
在尝试回答同样的问题时,我发现了这篇文章。为了防止其他人仍在寻找,我终于想出了如何使用NSNotificationCenter。基本上,NSNotificationCenter会向整个应用程序发送“广播”消息。如果“观察者”碰巧正在倾听,如下所示,将调用给定的方法。代码如下所示:
在您的App代表中:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Add the tab bar controller's current view as a subview of the window
[window addSubview:tabBarController.view];
// Make sure you add this so that your tab bar calls its delegate methods
tabBarController.delegate = self;
}
// Optional UITabBarControllerDelegate method (this will be commented out by default - uncomment it)
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
// Create the NSNotificationCenter
[[NSNotificationCenter defaultCenter] postNotificationName:@"tabChanged" object:nil];
}
在视图控制器中:
- (void)viewDidLoad {
[super viewDidLoad];
// Register an observer to stop audio recording/playing on tab change
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(tabChanged)
name:@"tabChanged"
object:nil];
}
- (void)tabChanged {
@"Received Notification!";
if([player isPlaying]) {
[player stop];
}
}