Можно ли перенести данные, полученные из Firebase в классе контроллера панели вкладок, с контроллера панели вкладок на контроллер представления? Xcode, Swift

#ios #swift #xcode #uitabbarcontroller

Вопрос:

Итак, я хочу предварительно выбрать некоторые данные, необходимые в контроллерах представлений, связанных с контроллером панели вкладок, когда пользователь переходит со страницы входа на домашнюю страницу (контроллер панели вкладок существует между этими двумя контроллерами представлений). Я извлекаю данные в пользовательском классе TabBarController и использую следующий код для их отправки (не работает):

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
    if segue.destination is Profile { // Profile = one of the view controllers in the tab bar
            let vc = segue.destination as? Profile
            vc?.uid = self.userID
            vc?.name = self.name
            vc?.skills = self.skillSet
    }
    
}
 

Каков наилучший способ сделать это? Пожалуйста, обратите внимание, что я не могу предварительно выбрать данные перед контроллером панели вкладок, так как это страница входа в систему. Если я предварительно выберу данные страницы профиля на домашней странице (контроллер панели вкладок {главная страница, поиск, профиль}), как я могу перенести их на другой контроллер представления (в профиль) на той же панели вкладок?

Ответ №1:

Каков наилучший способ сделать это?

  • Я полагаю, что как только вы выполните вход в систему (на экране входа в систему), у вас будет идентификатор пользователя и другие данные, связанные с этим пользователем, поэтому внутри контроллера входа вы добавили код для создания контроллера панели вкладок в качестве начального контроллера.
  • Поэтому, исходя из этого, лучше всего хранить данные пользователя в контроллере панели вкладок.
  • Поэтому, как только вы введете данные в контроллер панели вкладок (либо с экрана входа, либо с главного экрана), вы сможете получить данные пользователя в любом корневом контроллере (главная страница, поиск, профиль), который находится внутри панели вкладок, с помощью кода ниже.

struct User { var userID: String? }

 class TabbarController: UITabBarController {
    var userData: User
}

class HomeController: UIViewController {
 var userData: User?
   override func viewWillAppear(_ animated: Bool) {
       if let tabBar =  self.tabBarController as? TabbarController {
        self.userData = tabBar.userData
       }
   }
}
 

введите описание изображения здесь

Ответ №2:

Этого можно достичь несколькими способами.

  1. Использование супервизионного контроллера,
  2. Использование класса SingleTone, если вы хотите получить доступ к подклассу TabbarViewVontroller, отличному от подкласса TabbarViewVontroller.
  3. Сохранение в общем расположении, например в константах, если данные небольшие.
  4. Предварительная выборка данных в одном VC, например, Домой, а затем переход к нужному VC по щелчку мыши.