0

我有一些麻烦。所以我有播放/停止的 AvPlayer 和 UIButton。另外:我有三个 UiViewControllers。我需要的是,当我单击第二个控制器上的第一个 UIVIewController 上的第一个按钮时,也分别按下第三个控制器按钮,反之亦然。它是如何制作的?有什么提议吗?

这是简单的代码 - 按下按钮 - 播放 URL Stream 并且当再次按下时停止音乐。

-(IBAction)playRadioButton:(id)sender
{
    if(clicked == 0) {    
        clicked = 1;
        NSLog(@"Play");
        NSString *urlAddress = @"http://URLRADIOSTREAM";
        NSURL *urlStream = [NSURL URLWithString:urlAddress];
        myplayer = [[AVPlayer alloc] initWithURL:urlStream];
        [myplayer play];
        [playRadioButton setTitle:@"Pause" forState:UIControlStateNormal];
    }
    else
    {
        NSLog(@"Stop");
        [myplayer release];
        clicked = 0;
        [playRadioButton setTitle:@"Play" forState:UIControlStateNormal];
    }
}
4

3 回答 3

1

如果您有多个控制器需要通知另一个控制器上的事件,您可以使用NSNotificationCenter

例如。在 ViewDidLoad 的一个控制器中

[[NSNotificationCenter defaultCenter]    addObserver:self 
                                            selector:@selector(playBtnClicked:)
                                                name:@"BTN_CLICKED"
                                              object:nil]; 

同样在同一个控制器中定义选择器,例如

-(void)playBtnClicked:(NSNotification *)pNotification
{
// do something
}

在另一个控制器中通过使用触发它

    [[NSNotificationCenter defaultCenter] 
                    postNotificationName:@"BTN_CLICKED" object:nil];
于 2013-05-18T23:11:49.603 回答
0

如果您不想使用 nsnotifications,请使用协议并使用委托通知其他视图控制器

于 2013-05-19T00:06:15.707 回答
0

首先,这 3 个视图控制器是一次分配和初始化的吗?如果没有,我建议你在你的AppDelegate类上设置一个属性,如下所示:

@interface AppDelegate

@property (nonatomic, assign) BOOL commonButtonPressed;
// All your code here

@end

你可以像这样设置这个属性:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.commonButtonPressed = YES; // or NO;

然后,从您的UIViewController课程中:

- (void)viewWillAppear:(BOOL)animated {

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    if (appDelegate.commonButtonPressed) {

        // Logic of what happens to the button goes here.
    }
}

这样做的另一种方法AppDelegate是使用,而不触及你的类NSUserDefaults,如下所示:

[[NSUserDefaults standardDefaults] setBool:(<YES or NO>) forKey:@"commonButtonPressed"];
[[NSUserDefaults standardDefaults] synchronize];

您可以像这样读回该值:

BOOL buttonPressed = [[NSUserDefaults standardDefaults] boolForKey:@"commonButtonPressed"];
于 2013-05-19T00:51:39.513 回答