IOS - Swift:在UITabbarController内的ViewControllers之间传递数据

时间:2018-06-01 02:39:33

标签: ios swift uitabbarcontroller uitabbar

我正在做一个快速的项目,UI设计已经如下图所示。

enter image description here

问题 我需要在Profile视图控制器和Home视图控制器之间传递双向数据。

我已经尝试过了: 内部主视图控制器:

   override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    NotificationCenter.default.addObserver(self, selector: #selector(selectMypost), name: NSNotification.Name("com.rjt.Chao.postsCliked"), object: nil)
}
@objc func selectMypost(){
    isFiltering = true
    if let currentUserId = Auth.auth().currentUser?.uid {
        filteredPosts = posts.filter{
            $0.userID == currentUserId
        }
    }
    tblview.reloadData()
}

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    guard let curUserId = Auth.auth().currentUser?.uid else {return false}
    let count = posts.filter{$0.userID == curUserId}.count
    NotificationCenter.default.post(name: NSNotification.Name("com.rjt.Chao.mypostnumbercount"), object: self, userInfo: ["currentUserPostCount":count])
    print(viewController)
    return true
}

Inside Profile视图控制器:

    @objc func changeCounts(notification:Notification){
    guard let count = notification.userInfo!["currentUserPostCount"] else {return}
    posts.setTitle(String(count as! Int), for: .normal)
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
            NotificationCenter.default.addObserver(self, selector: #selector(changeCounts), name: NSNotification.Name("com.rjt.Chao.mypostnumbercount"), object: nil)
}

但是当我第一次点击Profile选项卡项时,没有调用选择器函数,UIButton标题没有改变。

我的猜测: 似乎应该在通知发布之前添加观察者。我对吗?

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

创建一个全局结构/静态类,您可以在其中存储信息(选择您最需要的套件)。研究MVC和Singleton设计模式。基本上,MVC是一种涉及完全分离数据和VC的模式,因此您的视图和控制器只处理UI内容,并且只要需要访问信息,它们就会访问您的数据类。单身是我在顶部建议的更多。单个结构/类(通常是类),用于保存应用程序的数据。