по моему мнению, это не очень хороший пользовательский опыт для пользователей iOS, но в любом случае, пожалуйста, попробуйте следующий подход, и он будет работать нормально с вами
1 - прежде всего, попытайтесь построить следующую иерархию вваш stroyboard
обратите внимание, что серый контроллер вида не UITabBarController
, это просто UIViewController
, но он содержит UITabBar
объект
2 - необходимо указать красный контроллер вида stroyboard
id " RedViewController ", а также дать синий контроллер вида " BlueViewController "
3 - дать вложенный UITabBarItem
тег 0 для первого UITabBarItem, который назвал «Favorite», и дать tag 1 для второго UITabBarItem, который назвал «more»
4 - наконец добавьте следующий класс к UIViewController
, имеющему объект UITabBar
, в нашем примере это будет серый контроллер вида
class SecondViewController: UIViewController {
lazy var blueViewController: UIViewController? = {
self.storyboard?.instantiateViewController(withIdentifier: "BlueViewController")
}()
lazy var redViewController: UIViewController? = {
self.storyboard?.instantiateViewController(withIdentifier: "RedViewController")
}()
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var nestedTabBar: UITabBar!
override func viewDidLoad() {
super.viewDidLoad()
nestedTabBar.delegate = self
addRedViewController()
self.nestedTabBar.selectedItem = self.nestedTabBar.items?.first
}
func addBlueViewController() {
if let redViewController = redViewController {
redViewController.willMove(toParent: nil)
redViewController.view.removeFromSuperview()
redViewController.removeFromParent()
}
if let blueViewController = blueViewController {
addChild(blueViewController)
blueViewController.view.frame = containerView.frame
containerView.addSubview(blueViewController.view)
blueViewController.didMove(toParent: self)
}
}
func addRedViewController() {
if let blueViewController = blueViewController {
blueViewController.willMove(toParent: nil)
blueViewController.view.removeFromSuperview()
blueViewController.removeFromParent()
}
if let redViewController = redViewController {
addChild(redViewController)
redViewController.view.frame = containerView.frame
containerView.addSubview(redViewController.view)
redViewController.didMove(toParent: self)
}
}
}
extension SecondViewController: UITabBarDelegate {
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
if item.tag == 0 {
addRedViewController()
} else {
addBlueViewController()
}
}
}