我的应用程序中有2个ViewControllers。
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];
}
这样,我的应用程序在每个视图中控制远程控制,但这并不能解决我的问题,因为ViewController2中没有处理收到的事件。
但我无法处理AppDelegate.m中收到的事件,所以我必须处理每个ViewController中的事件?
我是iOS开发的新手,不知道我是否在这里思考。
感谢任何帮助。
答案 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.
}
}
}
答案 1 :(得分:1)
最简单的方法是将UIApplication子类化并在那里处理事件。
答案 2 :(得分:0)
有3个解决方案2失败1是正确的。
我现在很懒,解释为什么其他2失败了。所以这是我的实现逻辑(我也用音频做过)
有一个模型,有几个控制器,并且有一些视图。首先熟悉ModelViewController模式,因为在这里你需要做一个多控制器和多视图:)
在一个类中,不需要将UIViewController存储为数据,即“模型”。在这里你有歌曲名称,音量,猫颜色,狗鞋尺寸等等。
现在实现几个控制器。这些类为同一个模型实例(您的示例文本)设置了一些属性值。
在其他类中,您甚至可以实现接收器:模型具有setter函数并为订阅的事件侦听器填充fire事件。 - 好吧,这解释为Java,但在iOS中是相同的。
可以将这些属性更改事件侦听器嵌入到新控制器或新视图中。
很容易说,对于初学者来说,更难以正确实施。
我给出了一个想法和关键词搜索内容。希望它能帮到你。
有两种更简单的解决方案,但它无法正常工作。