удалить 2 подпредставления за один раз - PullRequest
1 голос
/ 08 января 2011

Я пытаюсь удалить два viewcontrollers (которые были добавлены друг на друга) одним методом.Я сделал взгляды в Interface Builder.все они имеют свои собственные файлы .h и .m, чтобы идти с ним.

Сценарий, в котором я нахожусь:

У меня есть главное меню с заголовочным файлом view2импортирован.В методе я добавляю второй вид поверх суперпредставления примерно так:

view2ViewController * view2 = [[view2ViewController alloc] initWithNibName:@"view2ViewController" bundle:nil];
[self.view addSubview:view2.view];

, затем в представлении 2 я добавил файл заголовка представления 3, чтобы я мог добавить представление 3 в качестве подпредставления поверх view2.У меня есть другой метод, который снова подключен к построителю интерфейса с UIButton, поэтому при нажатии кнопки вызывается метод в view2, который добавляет представление 3 сверху точно таким же образом, как это:

view3ViewController * view3 = [[view3ViewController alloc] initWithNibName:@"view3ViewController" bundle:nil];
[self.view addSubview:view3.view];

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

Как это можнобыть достигнутым?

Что у меня есть:

[self.view removeFromSuperview];

Это, однако, удаляет только вид 3 ... но оставляет вид 2 на месте.

Что нужно изменить, чтобы я тоже мог удалить представление 2?

Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 08 января 2011

Я бы сделал это, добавив view2 и view3 в качестве подпредставлений основного вида. Затем, когда действия кнопки запускаются, добавление и удаление подпредставлений будет выполняться контроллером представления основного вида.

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

[self.view removeFromSuperview];
[self.view.superview removeFromSuperview];

Хотя я не уверен, стоит ли вам это делать. : P

0 голосов
/ 08 января 2011

Я не знаю, что именно вы пытаетесь сделать, но у меня складывается впечатление, что вам нужен новый контроллер представления.Если у вас есть UINavigationController в вашем приложении, вам просто нужно сделать

[navigationController pushViewController:view2 aimated:YES]

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

@protocol View3ViewControllerDelegate
- (void)view3ControllerBackToMainMenuButtonPressed:(View3ViewController*)controller;
@end

Этот протокол затем реализуется классом, который фактически выдвигает другие контроллеры представления.В реализации вы бы открыли все контроллеры представления, которые вы больше не хотите отображать.Для этого вы можете использовать

[navigationController popToViewController:myMainMenuViewController animated:YES]

или, если ваш контроллер представления главного меню фактически является корневым контроллером представления:

[navigationController [navigationController popToRootViewControllerAnimated:YES]

Таким образом, только один класс отвечает за нажатие и извлечение всех контроллеров представления и обработку кнопки «Назад в главное меню».Использование пользовательского протокола, как описано выше, является рекомендуемым способом обработки выталкивания контроллеров push-представлений в таком сценарии.

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

0 голосов
/ 08 января 2011

Это то, что вам нужно?

    [[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
...