我有一个带有3个视图控制器的Tab栏应用程序,FirstViewController有一个带有歌曲和播放/暂停按钮列表的音频播放器。 现在我希望SecondviewController和ThirdViewController添加一个按钮,该按钮将调用FirstViewController类的方法 - (void)playpause。
看起来很简单,但我找不到让它工作的方法,我试过了:
- (IBAction) playpause1
{
PlayerAppDelegate *appDelegate = (PlayerAppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate performSelector:@selector(playpause)];
NSLog(@"playpause test");
}
但是这段代码只控制app委托中的方法,而不是直接在我需要的FirstViewController类上。
任何提示?
答案 0 :(得分:1)
有很多可能性:
将音频播放功能移动到单独的对象,因为它与视图控制器通常执行的操作截然不同。然后给所有三个视图控制器提供对该音频播放器的引用,并让它们在必要时使用它。
让创建视图控制器的对象(通常是app委托)为第二个和第三个视图控制器提供对第一个视图控制器的引用,并让它们发送-playpause
消息。
使用通知。第二和第三视图控制器可以简单地发布第一个控制器将监听的通知。这避免了让三个视图控制器彼此了解的需要。
答案 1 :(得分:0)
如果我正确理解了您的问题......您可以使用可选协议和委托来实现此目的。例如,在SecondViewController的.h文件中:
@protocol SecondViewControllerDelegate - (无效)playpause1; @end
@property(assign)id delegate;
在FirstViewController的.h文件中,包括这是接口行:
FirstViewController shold实现了 - (无效)playpause1 { NSLog(@“playpause test”); }