![](/img/trans.png)
[英]how do i call SetRootViewController from a view controller using swift?
[英]Using Swift, how do I call a function coded in one view controller from a button in another view controller?
我已经开始通过在Swift编程语言上进行一些在线课程来学习编程。 我正在试验一个Xcode项目,其中在我的主故事板上有两个视图控制器。
在项目中,我有一个按钮可以将我从视图控制器1转到视图控制器2。视图控制器2具有三个按钮:
所讨论的函数实际上非常简单:
func ResetGame()
{
PlaySoundButton()
score = 0
totalquestionsasked = 0
}
我已经迷失了试图使其工作的所有方式,但最初我认为这只是一个简单的按钮,在第二视图中具有以下代码片段之一:
@IBAction func buttonResetGame(sender: UIButton) {
ResetGame()
}
要么
@IBAction func buttonResetGame(sender: AnyObject) {
ResetGame()
}
但这当然会导致使用未解决的标识符“ ResetGame”错误。
我还尝试按照以下示例在按钮代码中直接对函数进行编码:
@IBAction func buttonResetGame(sender: UIButton) {
PlaySoundButton()
score = 0
totalquestionsasked = 0
}
但是当然那也不行。
我已经对此进行了研究,似乎可以在Objective C和其他编程语言中实现,但是我似乎找不到使用Swift的示例。 这是否意味着这是不可能的,或者仅仅是这不是完成的事情?
综上所述:
通常,可能(但不建议)是因为视图控制器在那里用于显示视图,而不是用于在不同视图控制器之间共享功能。
您应该通过创建要从两个View Controllers引用的单独类来实现此目的,在该类中您将定义此函数,该函数具有通用功能。
编辑 :如果您不想共享2个视图控制器的通用功能,而只需要从另一个控制器中调用一些代码,则可以使用如下委托模式
class FirstController: UIViewController, YourProtocol {
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
if segue?.identifier == "yourSegueName" {
let viewController = segue!.destinationViewController as! SecondController
viewController.controller = self
}
}
func someFunction() {
}
}
class SecondController: UIViewController {
var controller: YourProtocol? // reference to the delegate alias First Controller
override func viewDidLoad() {
super.viewDidLoad()
controller.someFunction() // call function from the delegate alias first controller
}
}
protocol YourProtocol {
func someFunction()
}
要调用ResetGame(),您需要第一个视图控制器的实例,然后可以调用instance.ResetGame()
。 您可以使用以下方式将第一个视图控制器的实例传递给第二个视图控制器
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let secondViewController = segue.destinationViewController as! SecondViewController
destinationVC.instance = self
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.