2017-07-30 68 views
0

我試圖使用委託從一個類發送數據到另一個類。在不帶故事板的類之間傳遞數據

我設置委託在這個類:

class AnswerViewController: UIViewController, tagToIndexDelegate{  
override func viewDidLoad() { 
    super.viewDidLoad() 
    getDictionary() 
} 

func getDictionary() { 
    let myCell = MyCell() 
    myCell.delegate = self 
    print(123) 
} 

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

而在這個類通過委託獲取數據:

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

class MyCell: UITableViewCell, YSSegmentedControlDelegate{ 

var delegate: tagToIndexDelegate? 

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

    tagToIndex[actionButton.tag] = index 
    delegate?.finishPassing(dictionary: tagToIndex) 

}  
} 

我一直沒能得到dictionary值打印類AnswerViewControllerAnswerViewController肯定有效,因爲每當我按下按鈕繼續執行此視圖控制器時,就會執行print語句(直到按下按鈕纔會創建AnswerViewController的實例)。

值得注意的是,我沒有在這個項目中使用故事板,否則我可以使用代表與故事板segue一起完成任務。

+0

我想你可以通過在委託之前添加一個斷點來檢查嗎?.finishPassing(dictionary:tagToIndex)來查看AnswerViewController是否被正確指定爲委託,而您正在執行請檢查tagToIndex在此處包含的內容。請嘗試並告訴結果 – 3stud1ant3

+0

MyCell應該在UITableView中嗎?你應該在'cellForRowAt:' – Paulw11

+0

@ Paulw11中設置委託單元在哪裏分配單元格我試過了,它實際上工作得很好。問題是,在'cellForRowAt'中設置委託之後,我能夠使用存根訪問'tagToIndex'的唯一地方就在'TableViewController'類中。考慮到我在'answerViewController'中需要'tagToIndex',這並沒有太大的幫助。我可能會錯過一些基本的東西,我對此很新穎。 –

回答

0

有些事情錯在這裏:

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

    tagToIndex[actionButton.tag] = index 
    delegate?.finishPassing(dictionary: tagToIndex) 

} 

要更新tagToIndex[actionButton.tag] = index,,但它沒有返回存儲。
希望這會有所幫助!

+0

這似乎是問題所在。任何想法如何我可以解決這個問題? –

相關問題