Swift - 从另一个类运行方法

时间:2015-04-22 05:36:37

标签: ios swift

我想知道如何从另一个类运行一个方法。例如,类似下面的代码:

let newVC: ScoreViewController = ScoreViewController()
newVC.makeScore()

以上代码对我不起作用,因为在makeScore()中,我正在更改标签的文本,我无法使用上面的代码,因为它正在创建一个新实例。有没有办法在不创建新实例的情况下调用方法来运行,以便我可以在makeScore()中更改标签的文本?

编辑:

如何将ScoreViewController添加到PageViewController:

let vc = storyboard.instantiateViewControllerWithIdentifier("Score") as! ScoreViewController
self.addChildViewController(vc)
self.scrollView.addSubview(vc.view)

2 个答案:

答案 0 :(得分:1)

我假设您在FirstViewController中使用某种方法更改了分数并将其显示在ScoreViewController中。委托模式是此问题的可能解决方案。在FirstViewController中创建用于更新分数的协议,例如:

protocol FirstVCScoreDelegate:NSObjectProtocol {

    func makeScore()
}

然后在FirstViewController内为此委托创建一个var:

var delegate: FirstVCScoreDelegate

然后在您创建PageViewControllerFirstViewController实例的ScoreViewController中,将FirstViewController的代理设置为ScoreViewController:< / p>

var firstVC: FirstViewController()
var scoreVC: ScoreViewController()
firstVC.delegate = scoreVC

在此之后,在分数变化的FirstViewController中的方法中

@IBAction func scoreChangeAction(sender: AnyObject) {

        if delegate.respondsToSelector(Selector("makeScore")) {

            delegate.makeScore()
        }
    }

这将通知ScoreViewController更新分数。您现在必须在ScoreViewController

中实现委托方法
extension ScoreViewController: ScoreDelegate {

    func makeScore() {
        //update your label
    }
}

我相信这会解决你的问题。

<强>更新

PageViewController viewDidLoad:方法中尝试此操作:

override func viewDidLoad() {
        super.viewDidLoad()

        let mainStoryboard = UIStoryboard(name: "MainStoryboard", bundle: NSBundle.mainBundle())

        let firstVC : FirstViewController = mainStoryboard.instantiateViewControllerWithIdentifier("firstVC") as FirstViewController

        let scoreVC : ScoreViewController = mainStoryboard.instantiateViewControllerWithIdentifier("scoreVC") as ScoreViewController

        firstVC.delegate = scoreVC

        self.addChildViewController(firstVC)
        self.addChildViewController(scoreVC)

        self.scrollView.addSubview(firstVC.view)
        self.scrollView.addSubview(firstVC.view)
    }

答案 1 :(得分:0)

在PageViewController中,声明一个属性:

class PageViewController {
    var scoreViewController:ScoreViewController
    // ....
 }

初始化ScoreViewController后:

let vc = storyboard.instantiateViewControllerWithIdentifier("Score") as! ScoreViewController

将其作为财产保留:

self.scoreViewController = vc

然后使用

self.scoreViewController.makeScore()