2013-04-04 59 views
0

我正在編寫一個Quiz-App。在Menu-ViewController中,我將Music添加到項目中。 MusicPlayer運行良好,只要Menu-ViewController在前面,我也可以控制它(播放,暫停,停止等)。當我顯示另一個ViewController時,音樂將在後臺運行,就像我想要的那樣。但是,如果嘗試調用第二個ViewController中第一個ViewController的播放/暫停方法,那麼音樂將暫停或停止。我不知道爲什麼!如果我將其他說明添加到此方法,一切都會好起來的。 (我試過exit(0);方法這是我的代碼:iOS:控制另一個視圖(控制器)的AudioPlayer

控制器1個.H:

@implementation MenuViewController : <....> { 
... } 
@property (retain) AVAudioPlayer *backgroundPlayer; 
- (void) playPauseMethod; 

控制器1個.M:

@interface ... 
@end 
@implementation MenuViewController 
@ synthesize 
- (void) soundChanger { 
if (hintergrundPlayer.isPlaying) { 
    [backgroundPlayer pause];} 
else if (!backgroundPlayer.isPlaying) { 
    [backgroundPlayer play];}} 

控制器2·H:

#import "MenuViewController.h" 
@interface QuizViewController : UIViewController{} 

控制器2的.m:

@interface ... 
@end 
@implementation MenuViewController 
@ synthesize ... 
//..... musicPlayer is playing music. 
- (IBAction)myMusic:(id)sender { 
//first try: 
[[[MenuViewController alloc] init].backgroundPlayer pause]; 
//second try: 
[[[MenuViewController alloc] init] soundChanger];} 

我想在每個ViewController中控制音樂。我期待着您的幫助。

回答

0

你在控制器2創建全新MenuViewController與

[[MenuViewController alloc] init] 

來處理這將是建立一個協議控制器2類似

@protocol <Controller2Delegate> 
-(void) playButtonPressed:(id)self; 
@end 

然後設置的最佳方式代理財產(仍在控制器2中)如下:

@property (weak) id <Controller2Delegate> delegate; 

於是,早在控制器1,當您創建控制器2,設置它的委託財產,像這樣:

QuizViewController *controller2 = [[QuizViewController alloc] init]]; 
controller2.delegate = self; 

然後某處創建playButtonPressed方法控制器1.從控制器2,你會做這樣的事情:

[self.delegate playButtonPressed:self]; 

而這將調用控制器1中的方法,在那裏你可以暫停後臺播放器。

+0

Thx爲答案!在這種情況下,如何向此代理髮送消息? – user2191303 2013-04-10 12:17:56

+0

我在答案中增加了一些。希望有所幫助。對代表們來說可能值得一讀,以及如何最好地在類之間來回發送消息。 – Mike 2013-04-10 17:03:41

相關問題