Дочерние контроллеры представления Root View Controller находятся поверх корня

У меня есть, казалось бы, простая проблема, но я не могу найти решение! У меня есть подкласс UIViewController, который является моим корневым контроллером представления, и десять разных других контроллеров UIView, которые я хочу загружать в качестве дочерних контроллеров представления при вызове (по одному, а не все десять на экране одновременно).

Корневой контроллер имеет несколько кнопок, действия которых вызывают соответствующий код для вызова дочернего контроллера представления. Контроллер корневого представления загружается первым пером, и я хочу создать его экземпляр с помощью page01ViewController в качестве первого дочернего элемента. Но всякий раз, когда я вызываю следующий код, дочерний контроллер представления накладывается поверх моего rootViewController, скрывая все кнопки управления в моем корневом контроллере!

 //  RDJrootPageViewController.m

 #import "RDJrootPageViewController.h"
 #import "RDJhomeScreenViewController.h"
 #import "RDJpage01ViewController.h"
 #import "RDJpage02ViewController.h"
 #import "RDJpage03ViewController.h"
 #import "RDJpage04ViewController.h"
 #import "RDJpage05ViewController.h"
 #import "RDJpage06ViewController.h"
 #import "RDJpage07ViewController.h"
 #import "RDJpage08ViewController.h"
 #import "RDJpage09ViewController.h"
 #import "RDJpage10ViewController.h"

 @interface RDJrootPageViewController ()

 @property (retain, nonatomic) RDJhomeScreenViewController *homeScreenViewController;
 @property (retain, nonatomic) RDJpage01ViewController *page01ViewController;
 @property (retain, nonatomic) RDJpage02ViewController *page02ViewController;
 @property (retain, nonatomic) RDJpage03ViewController *page03ViewController;
 @property (retain, nonatomic) RDJpage04ViewController *page04ViewController;
 @property (retain, nonatomic) RDJpage05ViewController *page05ViewController;
 @property (retain, nonatomic) RDJpage06ViewController *page06ViewController;
 @property (retain, nonatomic) RDJpage07ViewController *page07ViewController;
 @property (retain, nonatomic) RDJpage08ViewController *page08ViewController;
 @property (retain, nonatomic) RDJpage09ViewController *page09ViewController;
 @property (retain, nonatomic) RDJpage10ViewController *page10ViewController;


 @end

 @implementation RDJrootPageViewController

 - (void)viewDidLoad
 {
     [super viewDidLoad];
// Do any additional setup after loading the view.
currentPage = 1;

self.page01ViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"page01"];

[_page01ViewController.view setFrame:CGRectMake(0, 0, 1024, 768)];
[self addChildViewController:_page01ViewController];
[self.view addSubview:_page01ViewController.view];
[_page01ViewController didMoveToParentViewController:self];
[self.view setUserInteractionEnabled:YES];

 }

Моя проблема похожа на ту, которую задавали здесь, но решение так и не было найдено:

Возврат из контроллера дочернего представления в контейнер

Каждый учебник, который я нахожу, имеет одинаковую настройку: создайте новый VC, добавьте его как дочерний вид к себе, затем добавьте его как подвид к вашему корневому представлению, но это не работает.

Кто-нибудь знает правильный способ сделать это?


person jwade502    schedule 25.08.2014    source источник
comment
Что ты хочешь делать? Вы добавляете представление _page01ViewController в качестве подвида текущего представления. Вот почему он наложен.   -  person Ryan    schedule 25.08.2014
comment
Привет трюк14. Я хочу, чтобы мой rootViewController находился поверх page01ViewController или любого другого выбранного pageController. Я был в предположении, что это то, что произойдет.   -  person jwade502    schedule 25.08.2014
comment
Прежде чем я использовал rootViewController, чтобы добавить pageXXViewController как просто подвид, не будучи дочерним, но это вызвало проблемы, и я обнаружил, что это не рекомендуется Apple, поэтому теперь я пытаюсь добавить их как дочерний элемент.   -  person jwade502    schedule 25.08.2014


Ответы (1)


Вы можете захотеть, чтобы пользователь insertSubview:atIndex:. Использование индекса 0 добавит представление под всеми другими представлениями. В качестве альтернативы вы можете иметь представление контейнера для представлений контроллеров представления страницы. Это представление контейнера необходимо добавить с индексом 0 в представлении RDJrootPageViewController. Представления контроллеров просмотра страниц могут быть добавлены к вышеупомянутому представлению контейнера.

Надеюсь это поможет.

person gabriel_101    schedule 25.08.2014
comment
Это на самом деле то, что я делал. Это работает, но когда я возвращаюсь к этому подпредставлению, взаимодействие с пользователем отключается в правой 1/4 экрана. - person jwade502; 25.08.2014
comment
Что ты имеешь в виду под переключением обратно? Также ваш код использует addSubview: не insertSubview:atIndex: как я предложил. - person gabriel_101; 25.08.2014
comment
О, упс, я скопировал это из учебника. Я имею в виду, что если страница01 загружается как подвид, а затем вы переключаете подвид на страницу02, а затем обратно на страницу01, то только 3/4 экрана обнаруживают входные данные. Я думаю, это потому, что приложение, которое я делаю, является только альбомным и ничего не вращает. - person jwade502; 25.08.2014