UITabBar应用程序和按钮,在选项卡中播放音乐


1

我有一个AVAudioPlayer实例在我的一个选项卡中运行。它通过IBAction被激活。

我希望音乐在用户点击另一个标签时停止。

我该怎么做呢?

我试过了Audio.stop;在viewDidLoad中,但没有奏效。

0

在你的UITabBarControllerDelegate中实现下面的方法;

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

只要用户在控制器中选择一个新视图,就会调用它。

我想你也可以覆盖在UIViewController中下面的方法正在播放的音频

-(void) viewDidDisappear:(BOOL)animated 
  0

viewDidDisappear:不是由所谓的UITabBarController不幸。 22 2月. 092009-02-22 11:03:32

  0

ahh - 在这种情况下,您可以轻松让您的UITabBarControllerDelegate调用这些方法并封装每个控制器中选项卡更改操作的逻辑。 22 2月. 092009-02-22 17:26:13

  0

感谢您的帮助,但我无法完成工作。我无法获得UITabBarControllerDelegate.h中的@interface来接受<AVAudioPlayerDelegate>。 24 2月. 092009-02-24 04:12:44


0

线了UITabBarControllerDelegate到主视图,然后听一听是(void)tabBarController:(UITabBarController *)tabBarController didSelectItem:(UITabBarItem *)item

当你得到该事件,在对象模型中找到玩家并停止它。


0

我在尝试回答同一确切问题时发生此帖。以防其他人仍在寻找,我终于想出了如何使用NSNotificationCenter来做到这一点。基本上,NSNotificationCenter向整个应用程序发送“广播”消息。如果一个“观察者”碰巧正在倾听,就像你在下面看到的那样,一个给定的方法被调用。代码如下所示:

在应用程序委托:

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