У меня есть Иерархия, которая выглядит следующим образом:
V C Иерархия
- UITabBarController
1.1 ViewController с 2 containerViews
1.1.1. UINavigationController
1.1.1.1. UITableViewController
1.1.1.1.1 UITableViewController
1.2 ViewController с 2 контейнерами View
1.2.1. UINavigationController
1.2.1.1. UITableViewController
1.2.1.1.1 UITableViewController
Требуемое решение
Я хочу иметь самый глубокий V C PopTo Root при выборе tabBar. В этом посте объясняется, как
мне удалось найти правильный V C в отладчике, но при написании кода для его получения Xcode жалуется на Segmentation Fault 11
Code
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController ) -> Bool {
if tabBarController.selectedViewController === viewController {
if let nc = viewController.children.first(where: { $0.isKind(of: UINavigationController.self)}) as? UINavigationController {
if let handler = nc.children.first(where: { $0.isKind(of: TabBarReselectHandling.self )}) as? TabBarReselectHandling {
handler.handleReselect()
}
return true
}
Как только я закомментирую строку if let handler
, Xcode показывает ошибку: An internal error occured. Source editor functionality is limited. Attempting to restore...
Эта строка работает для одного tabBarItem, но не для всех, поскольку два containerView в V C 1.1 и 1.2 могут быть в разном порядке
let handler = viewController.children[1].children[1] as? TabBarReselectHandling
Любые предложения о том, как я могу безопасно добраться до моего самого глубокого V C?