2015-02-10 81 views

回答

10

以下是幾種方法來完成您的對象之間的溝通。

  1. 您可以使用delegation pattern並基本上將viewcontroller設置爲customcell實例的委託。然後customecell對象會在需要的時候在委託上調用所需的方法。
  2. 您可以在調用所需方法的viewcontroller對象中設置closure,然後將該關閉傳遞給customcell對象,以便在您想從customcell實例執行viewcontroller的方法時使用。
  3. 您可以使用NSNotifications從customcell與viewcontroller進行通信。 customcell會「發佈」一個通知,並且視圖控制器(在註冊了「觀察」該特定通知之後)可以調用任何需要執行的方法。

還有其他方法可以解決這個問題,但這些是前三個想到的。希望給你一些關於如何繼續的想法。

下面是委託模式的一個簡單示例。

你的父母是這樣的:

protocol ParentProtocol : class 
{ 
    func method() 
} 

class Parent 
{ 

    var child : Child 

    init() { 
     child = Child() 
     child.delegate = self 
    } 
} 

extension Parent : ParentProtocol { 
    func method() { 
     println("Hello") 
    } 
} 

你的孩子是這樣的:

class Child 
{ 
    weak var delegate : ParentProtocol? 

    func callDelegate() { 
     delegate?.method() 
    } 

} 
+0

很好的解釋...但我試圖做的是在childcontroller parentcontroller創建對象。所以我可以通過childcontroller訪問parentcontroller方法。你能幫我解決這個問題嗎? – user3823935 2015-02-10 10:28:23

+0

委託模式可以做你正在問的東西(給子控制器一個控制父項的對象)。您必須將父級控制器傳遞給子控制器以獲取它。 – PixelCloudSt 2015-02-10 17:14:36

+0

如果你真的需要獲得父控制器對象的實例,並且沒有任何能力將它從父對象傳遞給子對象,那麼可以像單例對象那樣做一些非常難看的事情。坦率地說,當你考慮使用單例時,在很多情況下,現在是時候重新考慮你的架構了。 – PixelCloudSt 2015-02-10 17:20:56

相關問題