Ios 嵌套委托/在委托中实现viewDidLoad()

Ios 嵌套委托/在委托中实现viewDidLoad(),ios,swift,delegates,Ios,Swift,Delegates,我目前正在处理一个项目,该项目要求我使用委托将变量(已在委托中)传递到另一个视图控制器 我有一个名为MyTableView的TableView,它实现了一个名为MyCell的自定义类来布局各个单元格 class MyTableViewController: UITableViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if

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

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

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
值,因此我想在代理中实现
viewDidLoad
功能。一旦满足
tagToIndex
条件(未显示if-else语句),我将在委托函数中使用一系列if-else语句以某种方式设置视图

class AnswerViewController:UIViewController,TagToIndexDelegate{
//访问通过委托传递的变量tagToIndex
func finishPassing(字典:字典){
func viewDidLoad(){
super.viewDidLoad()
视图?.backgroundColor=UIColor(白色:240.0/255.0,alpha:1)
}
}
我还创建了协议
tagToIndexDelegate
,但我认为没有必要在这里发布。我有两个问题:

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

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

很抱歉,您无法在委托中实现
viewDidLoad()
,因为它从未执行过。
viewDidLoad
视图将出现
,它们将在用户看到视图之前执行
这是正确的方法

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)
 }
class AnswerViewController:UIViewController,TagToIndexDelegate{
//访问通过委托传递的变量tagToIndex
func finishPassing(字典:字典){
//背景视图自动更改不用担心
视图?.backgroundColor=UIColor(白色:240.0/255.0,alpha:1)
}

为什么要在代理中实现
viewDidLoad
功能。这样做的好处是什么?在没有
viewDidLoad
功能的情况下实现
finishPassing
有什么区别吗?我们试图实现什么。我们可以向您建议简单的方法,而不是您正在使用的复杂方法使用。
tagToIndex
跟踪一系列分段控件。
answerViewController
将根据这些分段控件的状态而不同(因此,
tagToIndex
)。这本质上是一个问答应用程序,因此有一个带有UILabel和一个“是”或“否”的
tableView
控制器每行“否”分段控件。当用户按特定顺序选择分段控件时,应用程序将进入
answerViewController
,谁的布局取决于回答了哪些问题“是”或“否”"我和某人简要地讨论了这一点,它似乎是正确的。问题是,当我尝试实现它时,Xcode将
cell1.delegate=self
更正为
cell1.delegate=self as!TagToIndexDelegate
。我不确定它为什么会向下转换,但不管是什么原因,它似乎都会阻止代理正常工作。@indiankid97您如何在cell中声明
delegate
您是指我的
cellForRowAt
函数是什么样子的吗?不!我只是问您如何在
MyCell
中声明
delegate
?在MyCell类中,我创建了一个类型为
TagToIndexDelegate
的委托变量:
var delegate:TagToIndexDelegate?
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
    }
}
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)
 }