将值从UIView传递给UIVIewController

时间:2014-07-20 16:25:27

标签: ios objective-c uiview uiviewcontroller

在我建立的iOS应用程序中,我正在以特定的时间间隔发出声音。一个自动收报机声音和另一个声音,这是在名为ResultView的UIView中完成的。现在,此视图由ResultViewController显示。

问题:  当按下导航按钮的后退按钮时,我希望声音消失。

这个后退按钮使它返回名为LOBBY的viewController 这是一个问题,因为没有viewWillDissapear函数可用。 整个代码很大,所以我只提出了小片段。提前致谢

ResultViewController:

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back.png"]
style:UIBarButtonItemStylePlain target:self
action:@selector(gotoLobby)];

//大厅选择器

- (void)gotoLobby{
     //Pop Back to Lobby
     [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];    
}

现在正在播放声音的视图(PlayerResultView):

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.75 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
if([[NSUserDefaults standardUserDefaults]boolForKey:@"soundKey"])
            {
                NSString *path = [[NSBundle mainBundle]
                                  pathForResource:@"ticker bell" ofType:@"caf"];
                NSURL *pathURL = [NSURL fileURLWithPath:path];
                AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL,&tickerbell);
                AudioServicesPlaySystemSound(tickerbell);
            }
}

再次: 当按下后退按钮时,我需要一种控制这些声音的方法。(当它进入大厅时)

因为条形码被编码,它不会显示在mainStoryBoard上所以请不要告诉我使用IBAction方法。 谢谢

1 个答案:

答案 0 :(得分:1)

正确的解决方法是将声音代码移动到视图控制器中。这将更符合模型 - 视图 - 控制器模式。

在任何情况下,您都需要添加PlayerResultView方法来停止播放声音:

- (void)stopCurrentSound {
    OSStatus AudioServicesDisposeSystemSoundID (tickerBell);
}

然后,在gotoLobby中,您可以调用它:

- (void)gotoLobby{

  [self.playerResultView stopCurrentSound];

  //Pop Back to Lobby
  [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];    
}

我假设您在视图控制器中引用了PlayerResultView视图,否则您需要添加一个视图,以便向视图发送消息。