2013-10-25 24 views
1

我的應用程序中有2個ViewController。在每個視圖控制器中處理遠程控制事件

ViewController1播放音頻和ViewController2顯示了一些文字。

我想用遙控器來控制音頻,當我在ViewController2我。例如,用戶在ViewController2中並想停止音頻。

我的代碼:

ViewController1.m完美的作品

- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent 
{ 
    MARK; 
    if (receivedEvent.type == UIEventTypeRemoteControl) { 

     switch (receivedEvent.subtype) { 

      case UIEventSubtypeRemoteControlTogglePlayPause: 
       DLog(@"remotecontrol_toggle"); 
       [self togglePlayPause]; 
       break; 

      case UIEventSubtypeRemoteControlPause: 
       DLog(@"remotecontrol_pause"); 
       [self pause]; 
       break; 

      case UIEventSubtypeRemoteControlPlay: 
       DLog(@"remotecontrol_play"); 
       [self play]; 
       break; 

      case UIEventSubtypeRemoteControlStop: 
       DLog(@"remotecontrol_stop"); 
       [self stop]; 
       break; 

      default: 
       break; 
     } 
    } 
} 

我的問題是,什麼是把這一切放在一起最好的方法是什麼?我必須在ViewController2中處理事件嗎?

我知道,在AppDelegate.m,我可以這樣做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    MARK; 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
} 

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    MARK; 
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents]; 
} 

這樣一來,我的應用程序中控制每個視圖遙控器,但由於接收到的事件AREN不解決我的問題在ViewController2中沒有處理。

但我不能把收到AppDelegate.m事件,所以我得把每一個視圖控制器的事件?

我是新來的iOS開發,不知道是不是我想就在這裏。

任何幫助表示讚賞。

回答

1

的最簡單的方法是繼承UIApplication並在那裏處理事件。

0

有3個解決方案2失敗1是正確的。

我lazzy現在來解釋爲什麼其他2失敗。因此,這裏是我的執行邏輯(我與音頻過我)

有一個模型,有幾個控制器,並有一些看法。首先熟悉ModelViewController模式,因爲在這裏你需要做一個多控制器和多視圖:)

在一個類中,不需要UIViewController存儲數據,那就是「Model」。這裏有歌曲名稱,音量級別,貓的顏色,狗鞋的尺寸,其他的。

現在實施幾個控制器。這些類爲相同的模型實例(您的示例文本)設置了一些屬性值。

在其他類,你甚至可以實現接收器:該模型具有setter函數,並填寫火災事件的事件偵聽器,這是認購。 - 好吧,這解釋爲Java,但在iOS中是一樣的。

那些屬性變化事件監聽器可以被嵌入到一個新的控制器或一個新視圖。

說起來容易,難以正確實現的初學者。

我給了一個想法和關鍵字來搜索內容。希望它會幫助你。

有2個解決方案更容易,但它不能正常工作。

+0

感謝您的回答,但現在,我不認爲我需要這種複雜性。我的應用很簡單,我只想在當前的環境中處理事件。 –

2

最簡單的方法是向ViewController1參考傳遞給ViewController2當你創建它。最簡單的方法是要有爲基準的init方法...

- (id) initWithController:(UIViewController*)controller 
{ 
    self = [super init]; 
    if (self) { 
     _controller1 = controller; 
    } 
    return self; 
} 

然後用同樣的方法來接受的事件,而是召喚出你的ViewController1處理它們...

- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent 
{ 

    if (receivedEvent.type == UIEventTypeRemoteControl) { 

     switch (receivedEvent.subtype) { 

      case UIEventSubtypeRemoteControlTogglePlayPause: 
       DLog(@"remotecontrol_toggle"); 
       [self.controller1 togglePlayPause]; 
       break; 

      // etc. 
     } 
    } 
} 
+0

謝謝你的回答,我會盡力的! –

相關問題