В соответствии с документацией, если вы хотите переключаться между разными представлениями, сохраняя видовой контроллер одинаковым, используйте UITabBar.Но если вы хотите переключаться между разными viewcontrollers, UITabBarController должен быть предпочтительным способом.
Проблема, с которой вы можете столкнуться при использовании UITabBar для переключения viewcontrollers, заключается в том, что вам нужно вручную обрабатывать множество вещей.Например, добавление и удаление ваших дочерних viewcontrollers.
Но если вы все еще настаиваете на этом, используйте родительские дочерние отношения между вашими viewcontrollers.Сделайте ваш HomeViewController
родительским представлением.Теперь на viewDidLoad
при условии, что первый элемент выбран по умолчанию, добавьте SampleOneViewController следующим образом:
if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s1") as? SampleOneViewController {
self.addChildViewController(vc)
self.view.insertSubview(vc, belowSubview: tabBar)
}
Теперь в делегате панели вкладок необходимо сначала удалить предыдущие дочерние контроллеры представления перед добавлением элемента, выбранного индексом..
Таким образом, ваш метод делегата станет примерно таким:
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){
switch item.tag {
// Remove the previous child viewcontrollers
for vc in self.childViewControllers {
vc.willMove(toParentViewController: nil)
vc.view.removeFromSuperview()
vc.removeFromParentViewController()
}
case 1:
if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s1") as? SampleOneViewController {
self.addChildViewController(vc)
self.view.insertSubview(vc, belowSubview: self.view)
}
break
case 2:
if let vc = self.storyboard?.instantiateViewController(withIdentifier: "s2") as? SampleTwoViewController {
self.addChildViewController(vc)
self.view.insertSubview(vc, belowSubview: self.view)
}
break
default:
break
}
Надеюсь, это поможет.