Swift - 委托不从其他类调用方法

时间:2015-04-22 18:03:29

标签: ios xcode swift delegates protocols

我按下按钮时尝试更改另一个视图控制器中的标签文字。以下是我设置代理的方式:

import UIKit

下的FirstViewController中
@objc protocol MyDelegate{
    optional func makeScore()
}

class FirstViewController: UIViewController

下的FirstViewController中
var delegate:MyDelegate?

在按下按钮时在FirstViewController中

delegate?.makeScore!()

在SecondViewController中(makeScore()所在的位置)

class SecondViewController: UIViewController, MyDelegate

SecondViewController中的makeScore()方法

func makeScore() {
    println("worked")
}

按下按钮时没有记录任何内容。我非常确定我正确设置了委托和协议。你看到什么遗失了吗?

注意:FirstViewControllerSecondViewController未通过segues连接。他们都在scrollView

1 个答案:

答案 0 :(得分:3)

我现在可以看到你以编程方式添加了第二个视图控制器:

theme()

只需添加一行,就像这样:

let vc6 = storyboard.instantiateViewControllerWithIdentifier("Second") as! SecondViewController
self.addChildViewController(vc6)
self.scrollView.addSubview(vc6.view)

修改 在一个侧节点上,我确信委托实际上是你尝试做的最好的方法。您可能最好只是对let vc6 = storyboard.instantiateViewControllerWithIdentifier("Second") as! SecondViewController self.delegate = vc6 self.addChildViewController(vc6) self.scrollView.addSubview(vc6.view) 进行全局引用,然后调用SecondViewController。委托通常用于回调未包含在View Controller中的对象