设置委托以将数据从一个标签传递到另一个标签

时间:2017-01-21 22:51:20

标签: ios swift xcode delegates

我正在使用:XCode 8.2,Swift 3.0,iOS 10.2,iPhone 7.我有Tab Bar Controller个孩子View Controllers

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

我已经查找了如何执行此操作herehere,但是第一个链接并不是我想要的,因为他正在讨论没有' t似乎是在标签之间移动时使用的相同类型的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
    }
}

我不确定这是否正确但是...我还有一个自定义类附加到我的标签栏控制器:

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函数。我基本上都在尝试:当用户点击结果标签时,该委托已设置,然后通过if语句检查可以显示文本字段的ResultsViewController。当然,这甚至无法编译/构建,我不确定从哪里开始。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

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

就我而言,它更像是:

在发送视图控制器中:

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

答案 1 :(得分:1)

我认为你不需要在这里使用委托模式。如果选中了选项卡,则子视图控制器将加载 - 这意味着将立即调用所有视图循环方法。您可以在子视图控制器的viewDidLoad,viewWillAppear和viewDidAppear中设置数据。