2017-07-30 70 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

这似乎是问题所在。任何想法如何我可以解决这个问题? –

相关问题