微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将数据传递到TabBarController

如何解决将数据传递到TabBarController

我很困惑,我有了我的第一个视图控制器,该控制器将允许用户键入单词(包括通配符),并且该视图将返回结果表视图,该结果只是与搜索匹配的单词的列表。 然后,用户选择该单词,并导航到标签栏控制器,其中的标签将是定义,同义词等。 我有一个自定义对象,该对象从第一个视图传递到didSelectRowAt中的选项卡控制器,但它不起作用。在选项卡控制器中,在viewWillAppear中具有对象。但是到viewDidLoad运行时,该对象为nil。 除打印语句外,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 selectedWordTabBarController类中,而不在tabOne类中。

解决方案:

var selectedWord类中创建一个tabOne。 然后从您的viewWillAppear中分配值。

希望这会起作用。如果没有,请在此处共享tabOne类代码。

,

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

(parent as? TabBarController).selectedWord

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。