2015-04-22 55 views
3

我試圖在按下按鈕時更改另一個視圖控制器中的標籤文本。下面是我設置了委託:import UIKitSwift - 不從別的類調用方法的代理

@objc protocol MyDelegate{ 
    optional func makeScore() 
} 

在FirstViewController下class FirstViewController: UIViewController

var delegate:MyDelegate? 

在FirstViewController下,當按下一個按鈕

在FirstViewController

delegate?.makeScore!() 

在SecondViewController(其中makeScore()所在地)

class SecondViewController: UIViewController, MyDelegate 

makeScore()方法SecondViewController

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

按下按鈕時,它不記錄任何東西。我很確定我正確設置了代表和協議。你看到有什麼遺漏嗎?

注意:FirstViewControllerSecondViewController不通過segues連接。他們都在scrollView

+0

您在哪裏分配'delegate'屬性? –

+0

正好在我的'@ IBOutlets'和'viewDidLoad'覆蓋之間。 – smecperson

+0

它聲明瞭委託,但您需要爲某個地方分配一個「SecondViewController」實例來使該通信正常工作。 –

回答

3

我現在可以看到你的這些行編程方式添加第二個視圖控制器:

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,然後調用self.vc6.makeScore()。代表通常用於回調視圖控制器中未包含的對象

+0

我以編程的方式做了它,但它不讓我設置委託。這是我使用的代碼:'讓vc6 = storyboard.instantiateViewControllerWithIdentifier(「Second」)as! SecondViewController' – smecperson

+0

如何將第二個視圖控制器添加到第一個視圖控制器的滾動視圖?是通過故事板還是以編程方式進行? –

+0

我以編程方式執行:'self.addChildViewController(vc6)'和'self.scrollView.addSubview(vc6.view)' – smecperson