ios - 设置委托(delegate)以将数据从一个选项卡传递到另一个选项卡

标签 ios swift xcode delegates

我正在使用:XCode 8.2、Swift 3.0、iOS 10.2、iPhone 7。我有一个带有子 View ControllersTab Bar Controller

我正在尝试将数据从一个 View Controller 发送到另一个。

我已经查过如何做到这一点 herehere但第一个链接并不是我想要的,因为他在谈论 Storyboard转场,这似乎与在选项卡之间移动时使用的转场类型不同。

我尝试在其中发送数据的选项卡:

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
    }
}

我不确定这是否正确,但是...我的选项卡栏 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 函数。我基本上是在尝试:当用户单击结果选项卡时,将设置该委托(delegate),然后通过 if 语句检查可以显示文本字段的 ResultsViewController。当然,这甚至无法编译/构建,我不确定从这里去哪里。任何帮助将不胜感激。

最佳答案

好吧,我自己想通了,正如@Leo Feng 所说,我不需要使用委托(delegate)模式。这个答案被证明是有帮助的:Passing data between tab viewed controllers in swift?

在我的例子中,它更像是:

在发送 View Controller 中:

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

在接收 View Controller 中:

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
        }
    }
}

关于ios - 设置委托(delegate)以将数据从一个选项卡传递到另一个选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41785400/

相关文章:

ios - 无法在 UITableView 中加载图像

iphone - 像这样实现 Objective C init 方法有什么意义呢?

ios - 无法将类型 'String?.Type' 的值转换为预期参数类型 'String?'

ios - 可调节+ UISlider,当UISlider变化时不播放seekToTime

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080 : JSON text did not start with array or object and option to allow fragments not set

ios - 在 Vimeo 上上传视频时出现问题(通过我的 iOS 应用程序)

swift - 为什么有必要将 Optional 强制转换为 Any?

ios - Swift Sprite 套件 : How do you set an animation for a random time?

ios - 从 AppDelegate 更改另一个文件中的变量

ios - 切换 VC 后多点连接 session 断开