我想知道如何从另一个类运行一个方法。例如,类似下面的代码:
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)
答案 0 :(得分:1)
我假设您在FirstViewController
中使用某种方法更改了分数并将其显示在ScoreViewController
中。委托模式是此问题的可能解决方案。在FirstViewController
中创建用于更新分数的协议,例如:
protocol FirstVCScoreDelegate:NSObjectProtocol {
func makeScore()
}
然后在FirstViewController
内为此委托创建一个var:
var delegate: FirstVCScoreDelegate
然后在您创建PageViewController
和FirstViewController
实例的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()