当前位置:  开发笔记 > IOS > 正文

设置委托以将数据从一个选项卡传递到另一个选项卡

如何解决《设置委托以将数据从一个选项卡传递到另一个选项卡》经验,为你挑选了1个好方法。

我正在使用:XCode 8.2,Swift 3.0,iOS 10.2,iPhone7。我有一个Tab Bar Controller孩子View Controllers

我试图将数据从一个视图控制器发送到另一个。

我已经在这里和这里查看了如何执行此操作,但是第一个链接并不是我想要的,因为他谈论的是Storyboard segue,这似乎与在选项卡之间移动时使用的segue类型不同。

我尝试在其中发送数据的标签:

protocol SendResultsDelegate {
    func sendResults(data: String)
}

class SendingVC {
    ....
    if delegate != nil {
        let data = // some string here
        delegate?.sendResults(data: data!)

    }
}

我尝试在其中接收数据并打印出来的标签:

import UIKit

class ResultsViewController: UIViewController, SendResultsDelegate {

    @IBOutlet weak var resultsTextField: UITextView!

    func sendResults(data: String) {
        resultsTextField.text = data
    }
}

而且我不确定这是否正确,但是...我的Tab Bar Controller也有一个自定义类:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    let resultsIndex = 2

    if item == (self.tabBar.items! as [UITabBarItem])[resultsIndex] {
        let sendingVC : SendingVC = segue.destinationViewController as! SendingVC
        SendingVC.delegate = self
    }
}

我不确定应该是tabBar函数还是prepare函数。我基本上是在尝试:当用户单击“结果”选项卡时,将设置该委托,然后通过ifResultsViewController可以显示文本字段的语句检查。当然,这甚至无法编译/构建,我不确定从这里开始。任何帮助将不胜感激。



1> noblerare..:

好的,我自己弄清楚,正如@Leo Feng所说,我不需要使用委托模式。事实证明,此答案很有用:快速在制表符查看的控制器之间传递数据?

就我而言,它更像是:

在发送视图控制器中:

let secondTab = self.tabBarController?.viewControllers?[2] as! ResultsViewController
secondTab.result_data = // my data here

在接收视图控制器中:

import UIKit

class ResultsViewController: UIViewController, SendResultsDelegate {

    @IBOutlet weak var resultsTextField: UITextView!

    var result_data : String? = nil

    override func viewWillAppear(_ animated: Bool) {
        if(result_data != nil) {
            // do stuff with result_data
        }
    }
}

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有