IOS - Swift: передача данных между ViewControllers внутри UITabbarController - PullRequest
0 голосов
/ 01 июня 2018

Я делаю быстрый проект, дизайн пользовательского интерфейса уже представлен, как показано на следующем рисунке.

enter image description here

ПРОБЛЕМА Iнужно передать данные двунаправленно между контроллером просмотра профиля и контроллером домашнего просмотра.

Я уже пробовал: Внутри контроллера домашнего просмотра:

   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
}

Внутри контроллера представления профиля:

    @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)
}

Но когда я впервые щелкнул по вкладке «Профиль», функция выбора не была вызвана, заголовок UIButton не изменился.

Угадай: кажется, что наблюдатель должен быть добавлен до уведомления.Я прав?

Как это исправить?

1 Ответ

0 голосов
/ 01 июня 2018

Создайте глобальный класс struct / static, внутри которого вы можете хранить информацию (выберите тот, который больше всего соответствует вашим потребностям).Изучите шаблоны проектирования MVC и Singleton.По сути, MVC - это шаблон, который предполагает полное разделение ваших данных и ваших VC, так что ваши представления и контроллеры обрабатывают только элементы пользовательского интерфейса, и всякий раз, когда им требуется доступ к информации, они получают доступ к вашим классам данных.Синглтон - это больше, чем я предлагал наверху.Одна структура / класс (обычно класс), который содержит данные для вашего приложения.

...