Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 到达另一个viewcontroller文件中的函数?_Ios_Swift - Fatal编程技术网

Ios 到达另一个viewcontroller文件中的函数?

Ios 到达另一个viewcontroller文件中的函数?,ios,swift,Ios,Swift,我使用本教程制作了一个popupviewcontroller: 我希望当我按下带有重试按钮的弹出窗口时,它会返回到原来的Viewcontroller,就像它那样,但也会在原来的Viewcontroller上自动重新启动游戏。所以基本上我想在弹出窗口上按Retry键时开始游戏。但我只有在尝试达到该功能时才会出错 原始视图控制器: var time : Float = 0.0 var timer: NSTimer? @IBOutlet weak var progressBar:

我使用本教程制作了一个popupviewcontroller:

我希望当我按下带有重试按钮的弹出窗口时,它会返回到原来的Viewcontroller,就像它那样,但也会在原来的Viewcontroller上自动重新启动游戏。所以基本上我想在弹出窗口上按Retry键时开始游戏。但我只有在尝试达到该功能时才会出错

原始视图控制器:

var time : Float = 0.0
    var timer: NSTimer?


    @IBOutlet weak var progressBar: UIProgressView!


    override func viewDidLoad() {
        super.viewDidLoad()
        startGame()
    }
    func startGame() {
        startTimer()

    }
    func startTimer() {
        timer = NSTimer.scheduledTimerWithTimeInterval(0.001, target: self, selector:#selector(GameViewController.setProgress1), userInfo: nil, repeats: true)

    }
    func setProgress1() {
        time += 0.001
        progressBar.setProgress(time / 2, animated: true)
        if time >= 1.9 {
            endPopUp()
            timer!.invalidate()
            progressBar.setProgress(0.0, animated: false)
            setProgress1(time = 0.0)

        }
    }


    func endPopUp() {
        let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("endPopUpID") as! PopUpViewController
        self.addChildViewController(popOverVC)
        popOverVC.view.frame = self.view.frame
        self.view.addSubview(popOverVC.view)
        popOverVC.didMoveToParentViewController(self)



        }



}
如您所见,当时间达到1.9时,popOverVC应该出现,但当弹出窗口用popOverVC中的按钮关闭时,我想键入: GameViewController.startName


但这只是给了我错误。。。我该怎么做

我不是斯威夫特人,但对于objective-c和斯威夫特,下面的概念是一样的。代码示例在objective-c中

待办事项: 在PopOverviewController头文件中声明协议。根据您的状态,您需要如下协议方法

@protocol PopOverViewControllerDelegate
    -(void)popOverRetryBtnPressed;
    -(void)popOverCloseBtnPressed;
@end
在头文件中声明一个属性,如下所示

@interface PopOverViewController:UIIViewController
    ...//other staff
    @property id<PopOverViewControllerDelegate> myDelegate;
@end
同样,完成关闭按钮功能。现在,将视图控制器中的代理实现为任何其他代理。别忘了设置popOverViewController的myDelegate属性

引擎盖下: 下面是使用委托模式时发生的情况。当一个协议被声明时,它包含的信息是,对象在实现这个协议时能够提供什么。假设在上面的示例中,我们的协议是这样的,符合此协议的对象将包含两个名为popoverretrybtnpress和popoverclosebtnppressed的函数。然后我们声明一个id类型的属性,它表示符合协议声明PopOverViewControllerDelegate的任何类。设置此属性将包含对符合并实现委托方法的对象的引用。现在是在适当的地方调用这些协议方法的时候了。在重试按钮操作中,调用popoveretrybtnpressed,并以相同的方式调用popOverCloseBtnPressed。现在在调用check之前,self.myDelegate对象实际上实现了您正在调用的任何方法,否则它将崩溃


仅此而已,希望您喜欢。

我知道什么是代表。但是我需要帮助如何在这个场景中使用它。因此,更详细一点的帮助将意味着很多。谢谢,但我需要更多的帮助:/我想我需要找其他地方。如果您发布了关于代码中错误的问题,您需要在问题中包含这些错误。
-(IBAction)onPressRetry:(id)sender
{
    if(self.myDelegate && [self.myDelegate respondToSelector:@selector(popOverRetryBtnPressed)])
    {
         [self.myDelegate popOverRetryBtnPressed];
    }
    else
    {
         NSLog(@"delegate not implemented");
    }
}