У вас есть пара проблем с вашим проектом.
1 Во-первых, вы используете UITabBarController
, поэтому код, который вы нашли, чтобы скрыть контроллер корневого представления, не работает.
- Второй лежит с вашей реализацией
makeSplitViewController
, где вы дважды инициализируете свои splitViewController
, rootViewController
и detailViewController
.
Итак, вам нужно исправить пункт 2, чтобы вы могли правильно управлять всеми этими контроллерами, а затем вам следует изменить toggleSplitView
, чтобы вы учитывали тот факт, что вы используете UITabBarController. Например, замените первые несколько строк этого метода следующими:
- (void)toggleSplitView {
NSArray *controllers = _tabBarController.viewControllers;
UIViewController* controller = [controllers objectAtIndex:1];
if (controller.view == splitViewController.view) {
[splitViewController.view removeFromSuperview];
splitViewController.viewControllers = [NSArray arrayWithObjects:rootViewController, rootViewController, nil];
splitViewController.view = detailViewController.view;
} else {
....
Как вы говорите, у меня нет доступа к _window
, чтобы проверить, есть ли там UISplit, потому что это представление не в _window, а в панели вкладок. Другая ветвь if
также должна быть переписана в соответствии с теми же критериями, но я оставлю ее для вас.
Приведенный выше код будет работать только с вашей второй вкладкой (той, которая соответствует индексу 1); действительно, поскольку вы перезаписываете splitViewController
в makeSplitViewController
, я могу использовать только элемент с индексом 1 на панели вкладок, не внося дальнейших изменений.