2017-06-21 81 views
0

我正在通過委託傳遞一個函數內存在的變量。大多數情況下,一切似乎都奏效。唯一無法弄清楚的是如何設置委託,例如它應該是這樣的"foo".delegate = self如何/在哪裏設置委託

通常這會很簡單,但因爲我正在使用一個函數而不是一個類的變量,我不知道什麼foo會(請原諒術語,我需要一個佔位符)

供您參考

這裏是協議:

protocol TagToIndexDelegate { 
func finishPassing (dictionary:Dictionary<Int,Int>) 
} 

這裏是我想從發送變量的函數:

extension MyCell: YSSegmentedControlDelegate { 

func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) { 
    tagToIndex[actionButton.tag] = index 

    delegate?.finishPassing(dictionary: tagToIndex) 
} 

func segmentedControl(_ segmentedControl: YSSegmentedControl, didPressItemAt index: Int) { 

}} 

哪裏delegateTagToIndexDelegate型的,並且內willPressItemAt,其存在的可變tagToIndex是我傳遞的數據。

最後,類我想實現TagToIndexDelegate

class AnswerViewController: UIViewController, TagToIndexDelegate { 

func finishPassing (dictionary: Dictionary <Int, Int>) 
{ 

} 


override func viewDidLoad() { 
    super.viewDidLoad() 

} 
} 

我是很新,使用委託,所以任何幫助或批評是極大的讚賞。

謝謝,

尼克

+0

我不完全確定這裏發生了什麼。如果委託是「MyCell」的一部分,那麼是否由初始化「MyCell」的人設置?這發生在哪裏? – Ssswift

+0

你嘗試過viewDidLoad嗎? – Boris

回答

0

假設AnswerViewController是包含在問題所引用的表和視圖細胞視圖控制器,它很可能也表視圖數據源。

UITableViewDataSource實施,在其中您正在創建MyCell情況下,可能看起來是這樣的:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let aCell = tableView.dequeueReusableCell(withIdentifier: "my_cell_reuse_id") as! MyCell 
    return aCell 
} 

你有什麼要做的只是委託設置爲self

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let aCell = tableView.dequeueReusableCell(withIdentifier: "my_cell_reuse_id") as! MyCell 
    aCell.delegate = self 
    return aCell 
} 

請注意,我假設delegateMyCell的財產:

class MyCell: UITableViewCell { 
    var delegate: TagToIndexDelegate? 
} 
+0

MyCell實際上是包含所有用於製作單元格的數據的自定義類。如果您需要,我可以完整地發佈代碼。謝謝您的幫助。 –

+0

當然,繼續。 – paulvs

相關問題