我正在使用:XCode 8.2、Swift 3.0、iOS 10.2、iPhone 7。我有一个带有子 View Controllers
的 Tab Bar Controller
。
我正在尝试将数据从一个 View Controller 发送到另一个。
我已经查过如何做到这一点 here和 here但第一个链接并不是我想要的,因为他在谈论 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/