首页 文章

在TabBar受控iOS应用程序的第二个选项卡中进行交互时,将RemoteControlEvents接收到第一个选项卡

提问于
浏览
3

我正在开发一个带有标签栏控制器的iOS应用程序 . 在第一个标签中,我放置了一个AVQueuePlayer实例,以开始播放来自网络的音乐 . 我做了所有编码,允许通过远程控制事件播放和暂停事件 . 但是只有当我留在第一个标签时才能接收远程控制事件 . 当我切换到其他选项卡时,第一个选项卡不会收到远程控制事件 .

当我将以下行放在第一个选项卡视图控制器中时,即使我留在第二个选项卡中,我也可以在第一个选项卡上接收远程控制事件 .

- (BOOL)canResignFirstResponder
{
    return NO;
}

但是我在其他视图中有一些文本字段,用户必须与之交互 . 通过不在第一个选项卡中重新分配第一个响应者,我无法在其他选项卡中输入文本 .

请帮助我如何处理远程控制事件以在第一个选项卡中控制AVQueuePlayer实例,同时我的用户在第二个选项卡中与应用程序交互?

谢谢你的帮助 !

1 回答

  • 0

    好 . 我自己想通了 .

    我在实现文件的开头为avqueueplayer创建了一个全局变量 . 在viewDidLoad方法中分配并启动了AVQueuePlayer . 创建了一个类方法来处理播放和暂停时要执行的操作 . 并在其他视图控制器中调用此类方法,以直接从这些视图控制器处理远程控制事件 . 以下是我编码的示例:

    //playerView header file
    
    @interface playerView : UIViewController
    
    + (void)togglePlayPause;
    
    @end
    
    //playerView Implementation File
    
    #import "playerView.h"
    
    @interface playerView ()
    @end
    
    @implementation playerView
    
    AVQueuePlayer *player;
    
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    player = [[AVQueuePlayer alloc] initWithPlayerItem:[AVPlayerItem playerItemWithURL: someurl]];
    }
    
    + (void) togglePlayPause
    {
        if (player.rate == 1.0)
        {
            [player pause];
        }
        else if ((player.rate == 0.0) && ([player status]!= 2))
        {
            [player play];
        }
    }
    
    // include all other methods to handle remote control events as laid in apple documentation
    
    @end
    
    
    
    //otherView Implementation file
    
    #include "playerView.h"
    
    
    @interface otherView ()
    
    @end
    
    @implementation otherView
    
    // include all other methods to handle remote control events as laid in apple documentation
    
    - (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent
    {
    
        if (receivedEvent.type == UIEventTypeRemoteControl) {
    
            switch (receivedEvent.subtype) {
                case UIEventSubtypeRemoteControlTogglePlayPause:
                    [playerView togglePlayPause];
                    break;
                default:
                    break;
            }
        }
    }
    
    @end
    

    对于处理Apple文档中所述的远程控制事件的所有其他方法,请参阅:

    Event Handling Guide for iOS - Remote Control of Multimedia

相关问题