如何为三个屏幕做同样的按钮?

时间:2013-05-18 22:16:12

标签: ios xcode uiviewcontroller uibutton

我遇到了麻烦。所以我有播放/停止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];
    }
}

3 个答案:

答案 0 :(得分:1)

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

EG。在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];

答案 1 :(得分:0)

如果您不想使用nsnotifications,请使用协议并使用委托通知其他viewcontrollers

答案 2 :(得分: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"];