IOS从另一个类调用一个方法

时间:2011-09-14 03:25:08

标签: ios methods

我有一个带有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类上。

任何提示?

2 个答案:

答案 0 :(得分:1)

有很多可能性:

  • 将音频播放功能移动到单独的对象,因为它与视图控制器通常执行的操作截然不同。然后给所有三个视图控制器提供对该音频播放器的引用,并让它们在必要时使用它。

  • 让创建视图控制器的对象(通常是app委托)为第二个和第三个视图控制器提供对第一个视图控制器的引用,并让它们发送-playpause消息。

  • 使用通知。第二和第三视图控制器可以简单地发布第一个控制器将监听的通知。这避免了让三个视图控制器彼此了解的需要。

答案 1 :(得分:0)

如果我正确理解了您的问题......您可以使用可选协议和委托来实现此目的。例如,在SecondViewController的.h文件中:

@protocol SecondViewControllerDelegate - (无效)playpause1; @end

@property(assign)id delegate;

在FirstViewController的.h文件中,包括这是接口行:

FirstViewController shold实现了 - (无效)playpause1 {   NSLog(@“playpause test”); }