将数据传递给 TabBarController

Pass Data to a TabBarController

对某些事情感到非常困惑,我有我的第一个视图控制器,它将允许用户输入一个词(包括通配符)并且该视图将 return 结果的表格视图,这只是一个列表与搜索匹配的词。 然后用户选择那个词,它导航到一个选项卡栏控制器,其中选项卡将是定义、同义词等。 我有一个自定义对象,我将其从第一个视图传递到 didSelectRowAt 中的选项卡栏控制器,但它不起作用。在标签栏控制器中,在 viewWillAppear 中它有对象。但是当 viewDidLoad 运行时,对象为零。 除了打印语句外,我目前在 viewDidAppear 中没有任何代码,所以我不知道它会丢失哪里

FirstViewController

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
    var word: WordDetails?
    word = results[indexPath.row]
    
    let detailVC = TabBarController()
    detailVC.selectedWord = word
    detailVC.navigationItem.title = word?.word
    
    tableView.deselectRow(at: indexPath, animated: true)
    
    navigationController?.pushViewController(detailVC, animated: true)
    
}

TabBarController

class TabBarController: UITabBarController, UITabBarControllerDelegate {

   var tabOne: UIViewController?
   var tabTwo: UIViewController?

   var selectedWord: WordDetails?

   override func viewDidLoad() {
       super.viewDidLoad()

       self.delegate = self
    
       tabOne = DefinitionViewController()
       let tabOneImage = UIImage.init(systemName: "book")
       let tabOneBarItem = UITabBarItem(title: "Definitions", image: tabOneImage, selectedImage: tabOneImage)
       tabOne?.tabBarItem = tabOneBarItem

       tabTwo = SynonymViewController()
       let tabTwoImage = UIImage.init(systemName: "quote.bubble")
       let tabTwoBarItem = UITabBarItem(title: "Synonyms", image: tabTwoImage, selectedImage: tabTwoImage)
       tabTwo?.tabBarItem = tabTwoBarItem

       self.viewControllers = [tabOne!,tabTwo!]
   }}

任何指导都会很棒,我确定是我误解了标签栏控制器的工作方式

更新

所以我几乎肯定误解了视图生命周期。我在 viewWillAppear 中具有价值这一事实很好。但是,如何将其传递给任何选项卡视图控制器?

我试图做这样的事情...... tabOne.selectedWord = self.selectedWord 但它错误 'UIViewController' 类型的值没有成员 'selectedWord'

我理解错了。

var selectedWord 出现在 TabBarController class 中,不出现在 tabOne class.

解法:

tabOne class 中创建一个 var selectedWord。 然后从你的 viewWillAppear.

中赋值

希望这会奏效。如果没有,请在此处分享 tabOne class 代码。

为什么 DefinitionViewController 和 SynonymViewController 需要 selectedWord 的另一个副本?它就在他们可以看到的 TabBarController 中。只需让他们参考

(parent as? TabBarController).selectedWord