我試圖使用委託從一個類發送數據到另一個類。在不帶故事板的類之間傳遞數據
我設置委託在這個類:
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
值打印類AnswerViewController
。 AnswerViewController
肯定有效,因爲每當我按下按鈕繼續執行此視圖控制器時,就會執行print語句(直到按下按鈕纔會創建AnswerViewController
的實例)。
值得注意的是,我沒有在這個項目中使用故事板,否則我可以使用代表與故事板segue一起完成任務。
我想你可以通過在委託之前添加一個斷點來檢查嗎?.finishPassing(dictionary:tagToIndex)來查看AnswerViewController是否被正確指定爲委託,而您正在執行請檢查tagToIndex在此處包含的內容。請嘗試並告訴結果 – 3stud1ant3
MyCell應該在UITableView中嗎?你應該在'cellForRowAt:' – Paulw11
@ Paulw11中設置委託單元在哪裏分配單元格我試過了,它實際上工作得很好。問題是,在'cellForRowAt'中設置委託之後,我能夠使用存根訪問'tagToIndex'的唯一地方就在'TableViewController'類中。考慮到我在'answerViewController'中需要'tagToIndex',這並沒有太大的幫助。我可能會錯過一些基本的東西,我對此很新穎。 –