nob*_*are 0 xcode delegates ios swift
我正在使用: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!)
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在其中接收数据并打印出来的标签:
import UIKit
class ResultsViewController: UIViewController, SendResultsDelegate {
@IBOutlet weak var resultsTextField: UITextView!
func sendResults(data: String) {
resultsTextField.text = data
}
}
Run Code Online (Sandbox Code Playgroud)
而且我不确定这是否正确,但是...我的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
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定应该是tabBar函数还是prepare函数。我基本上是在尝试:当用户单击“结果”选项卡时,将设置该委托,然后通过if对ResultsViewController可以显示文本字段的语句检查。当然,这甚至无法编译/构建,我不确定从这里开始。任何帮助将不胜感激。
好的,我自己弄清楚,正如@Leo Feng所说,我不需要使用委托模式。事实证明,此答案很有用:快速在制表符查看的控制器之间传递数据?
就我而言,它更像是:
在发送视图控制器中:
let secondTab = self.tabBarController?.viewControllers?[2] as! ResultsViewController
secondTab.result_data = // my data here
Run Code Online (Sandbox Code Playgroud)
在接收视图控制器中:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |