Ваша фундаментальная проблема заключается в том, что вы путаете разные иерархии родитель-потомок.
Напомним, что MVC - это модель, представление и контроллер.
В iOS есть две разные иерархии родитель-потомок: Один для контроллеров и один для представлений.
Следующие элементы являются частью иерархии родитель-потомок контроллера:
- TabBarController
- LugaresNavController (UINavigationController)
- LugaresViewController (UIViewController)
Это означает, что LugaresViewController.parentViewController должен быть LugaresNavController и т. Д..
Однако следующее не имеет никакого смысла:
- SubView (UIView)
- MapViewController (UIViewController)
- TableViewController (UITableViewController)
Представления могут иметь подпредставления, но представления не могут иметь контроллеров подпредставлений,
Вы делаете следующее?
- SubView (UIView)
- MapViewController.view (UIViewController s view is a subview of Subview)
- TableViewController.view (UITableViewController s view is a subview of Subview)
Это представление родительско-дочерняя иерархия.Это означает, что:
- SubView имеет два подпредставления (MapViewController.view и TableViewController.view)
- MapViewController.parentViewController имеет значение nil.
- MapViewController.navigationController равно nil.
вы можете использовать переходы вида для переключения между MapViewController.view и TableViewController.view, но не переходы viewController (например, presentModal ... или push или pop ViewController ...).
Если это то, что вы хотите, то вам просто нужно убедиться, что вы делаете:
[SubView addSubview: MapViewController.view];
[SubView addSubview: TableViewController.view];
Кстати, SubView - ужасное имя.Обычно мы называем это containerView или что-то в этом роде.подпредставление является настолько важным понятием, что вы хотите иметь возможность дифференцировать понятие подпредставления от экземпляра этого представления.Это все равно, что назвать своего ребенка "Малыш" или свою собаку "Щенок".