Понимание иерархии UIViewController - PullRequest
2 голосов
/ 21 июня 2011

Хорошо - мой мозг сейчас жарится, поэтому любая помощь будет признательна.

В моем приложении несколько подклассов UIViewController. давайте называть их VC_A, VC_B, VC_C, VC_D.

Пользователи взаимодействуют, касаясь кнопок на каждом из представлений.

Итак, мой AppDelegate добавляет в VC_A:

//Add the view controller's view to the window and display.  
[self.window addSubview:viewController.view];  
[self.window makeKeyAndVisible];  

VC_A затем загружает VC_B с помощью presentModalViewController:

    VC_B *tempView = [[VC_B alloc] initWithNibName:@"temploadingscreen" bundle:nil];
    [self presentModalViewController:tempView animated:NO];
    [tempView release];  

и так до тех пор, пока я не получу иерархию

VC_A 
- VC_B  
    - VC_C  
       - VC_D  

но затем, когда я вызываю presentModalViewController на VC_D, чтобы отвезти меня в VC_C, я хочу, чтобы это был новый экземпляр VC_C, а не исходный экземпляр.

Итак, мой вопрос, как вам поступить, нужно ли мне использовать [self dismissModalViewControllerAnimated:NO];, чтобы удалить старые экземпляры представлений.

Буду признателен за любую помощь, поскольку я выполнил поиск этого, но все учебные пособия и прочее используют навигационную панель для управления навигацией - и я не могу использовать ее из-за типа приложения. Любые примеры рабочего кода для правильного перемещения между новыми экземплярами UIViewControllers были бы хорошими.

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Просто создайте новый экземпляр с

ViewController_C *newVC_C = [[ViewController_C alloc] init]
[self presentModalViewController:newVC_C animated:NO];
[newVC_C release];
0 голосов
/ 21 июня 2011

Я решил сделать это по-другому, который отлично работает для того, что мне нужно.

Я создал базовый ViewController, в котором ничего не было в xib, а в методе viewDidAppear я вызвал другие viewControllers (с использованием presentModalViewController) на основе значения глобального NSNumber.

Таким образом, когда я обращаюсь к любому из других контроллеров представления, а не к ним, вызываю другой viewController, они просто устанавливают глобальную переменную, указывающую, какое представление загрузить, а затем закрывают текущийview (используя dismissModalViewController).

Таким образом, каждый экземпляр viewControllers закрывается и память освобождается.

Я создал пример проекта и поместил его на github https://github.com/sregorcinimod/Open

Просто посмотрите в Загрузках, вы увидите это там

...