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