委托中的嵌套委托/实现viewDidLoad()

时间:2017-07-22 03:30:08

标签: ios swift delegates

我目前正在开发一个项目,该项目要求我使用委托将变量(已经在委托中)传递到另一个视图控制器。

我有一个名为TableView的{​​{1}},它实现了一个名为MyCell的自定义类来布局单个单元格

MyTableView

前面提到的class MyTableViewController: UITableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if indexPath.row == 4 { let answerViewController = AnswerViewController() navigationController?.pushViewController(answerViewController, animated: true) } } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ var items = ["Item 1","Item 2","Item 3","Item 4"] let cell1: MyCell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! MyCell return cell1 } } 类有一个包含委托的扩展名。在这个委托中有一个名为MyCell的变量,我想将其传递给名为tagToIndex的视图控制器

AnswerViewController

设置视图的方式取决于extension MyCell: YSSegmentedControlDelegate{ func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) { //Modifying Variable Tag To Index tagToIndex[actionButton.tag] = index //Passing Variable to Delegate delegate?.finishPassing(dictionary: tagToIndex) } } 值,因此我想在委托中实现tagToIndex函数。我将在委托函数中使用一系列if-else语句,以便在满足viewDidLoad条件后以某种方式设置视图(if-else语句未显示)。

tagToIndex

我还创建了协议class AnswerViewController: UIViewController, TagToIndexDelegate { // Accessing the variable tagToIndex passed through the delegate func finishPassing(dictionary: Dictionary<Int, Int>) { func viewDidLoad() { super.viewDidLoad() view?.backgroundColor = UIColor(white: 240.0/255.0, alpha: 1) } } ,但我认为没有必要在此处发帖。我有两个问题:

  • 我在哪里设置目的地代表(即我在哪里放置tagToIndexDelegate
  • 我可以在像这样的委托中实际实现foo.delegate = self吗?如果是这样,这是正确的做法吗?

1 个答案:

答案 0 :(得分:0)

  

我在哪里设置目的地代表(即我在哪里放置foo.delegate = self

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
      var items = ["Item 1","Item 2","Item 3","Item 4"]

    let cell1: MyCell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! MyCell
   //set the destination's delegate
    cell1.delegate = self
    return cell1
    }
}
  

我可以在像这样的委托中实际实现viewDidLoad()吗?如果是这样,这是正确的做法吗?

很抱歉,您无法在委托中实施viewDidLoad()因为它永远不会执行。  viewDidLoadviewWillAppear,它们将在用户看到视图之前执行 这是正确的方法

class AnswerViewController: UIViewController, TagToIndexDelegate {

// Accessing the variable tagToIndex passed through the delegate 
func finishPassing(dictionary: Dictionary<Int, Int>) {
        //background view automatic change don't worry about that 
        view?.backgroundColor = UIColor(white: 240.0/255.0, alpha: 1)
 }