如何解决将数据传递到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 selectedWord
在TabBarController
类中,而不在tabOne
类中。
解决方案:
在var selectedWord
类中创建一个tabOne
。
然后从您的viewWillAppear
中分配值。
希望这会起作用。如果没有,请在此处共享tabOne
类代码。
为什么DefinitionViewController和SynonymViewController需要selectedWord
的另一个副本?它就位于TabBarController中,在那里他们可以看到它。只需让他们参考
(parent as? TabBarController).selectedWord
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。