Приложение и кнопка UITabBar, которая воспроизводит музыку на вкладке


1

У меня есть экземпляр AVAudioPlayer, который запускается внутри одной из моих вкладок. Он активируется через IBAction.

Я хочу, чтобы музыка останавливалась, когда пользователь нажимает на другую вкладку.

Как бы я это сделал?

Я пробовал theAudio.stop; в viewDidLoad, но это не сработало.

0

В UITabBarControllerDelegate реализован следующий метод;

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

Это вызывается всякий раз, когда пользователь выбирает новый вид в контроллере.

Я думаю, вы могли бы также переопределить следующий метод в UIViewController, который играет аудио

-(void) viewDidDisappear:(BOOL)animated 
  0

viewDidDisappear: не вызывается UITabBarController, к сожалению. 22 фев. 092009-02-22 11:03:32

  0

ahh - ну в этом случае вы можете легко заставить ваш UITabBarControllerDelegate вызывать эти методы и инкапсулировать логику того, что делать при изменении вкладок в каждом контроллере. 22 фев. 092009-02-22 17:26:13

  0

Спасибо за помощь, но я не могу заставить ее работать. Я не могу получить @interface в UITabBarControllerDelegate.h, чтобы принять <AVAudioPlayerDelegate>. 24 фев. 092009-02-24 04:12:44


0

проволоки вверх UITabBarControllerDelegate на главной странице, а затем слушать (void)tabBarController:(UITabBarController *)tabBarController didSelectItem:(UITabBarItem *)item

Когда вы получите это событие, найдите игрока в своей объектной модели и остановите его.


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