Переключение Iphone UIView: подпредставления предыдущего представления загрязняют недавно переключенное представление - PullRequest
0 голосов
/ 18 мая 2011

Я уже некоторое время работаю над переключением UIViews и пробую базовый переключатель UIView без использования UINavigationController. Я посмотрел на UINavigationControllers, но я так долго боролся с нижеприведенным, что хочу изучить его полностью.

Моя проектная организация:

MainViewController.h/.m    -> viewDidLoad: This method runs a NSTimer to update self.view with a few bits and bobs.

ConfigView.h/.m: -> viewDidLoad: nothing - just an idle view.  

MainViewController.xib     -> Main window NIB

ConfigView.xib   -> ConfigView NIB

У меня есть следующий метод в MainViewController.m, выполняемый для события нажатия UIButton:

- (IBAction)switchToConfigView:(id)sender {

if(self.configViewController == nil) {
    ConfigView *cv = [[ConfigView alloc] initWithNibName:@"ConfigView" bundle:nil];
    self.configViewController = cv;
    [cv release];
}

[self.view addSubview:configViewController.view];

}

Теперь, когда я переключаюсь на ConfigView, представление действительно отображается, но кажется, что viewDidLoad: from MainViewController все еще выполняется, в результате чего оба представления эффективно объединяются. Из кода я вижу, что это, очевидно, имеет место, поскольку сам фактический переключатель представления выполняется в контексте MainViewController, и, как вы можете видеть, просто подпредставление.

Мой вопрос заключается в том, как аккуратно убрать / приостановить все действия внутри MainViewController при переключении представления путем простого добавления к нему другого подпредставления? Я предполагаю, что это невозможно, или, скорее, это трудоемкая работа, где лучше применить какую-то другую методологию. Я подозреваю, что мне нужно реализовать фактическое переключение из ConfigView.h / .m, но я могу ошибаться.

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

спасибо

швейцарский сыр.

Ответы [ 3 ]

1 голос
/ 18 мая 2011

Мое предложение:

1) есть базовый, пустой вид;

2) добавить к нему подпредставление; это будет ваш фактический первый взгляд;

3) когда вы хотите переключиться, удалите первое подпредставление из базового представления и добавьте второе как подпредставление;

4) когда вы хотите переключиться обратно, удалите второй и добавьте первый как подпредставление к базовому представлению;

Вы можете легко обрабатывать столько видов, сколько хотите. это работает.

в качестве альтернативы, вы можете скрыть представление вместо его удаления.

1 голос
/ 18 мая 2011

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

Это мой личный опыт, поскольку я совершил эту большую ошибку в одном из моих предыдущих проектов.

Во всех случаях навигационное управление - лучший выбор для переключения видов, а не для добавления подвидов.

Пожалуйста, скажите мне, с какими трудностями вы сталкиваетесь в навигации, и я могу помочь с этим.

Спасибо

0 голосов
/ 18 мая 2011

Если NSTimer, настроенный вами в методе viewDidLoad MainViewController, добавляет подпредставления в представление mainViewController с помощью метода addSubview, эти представления будут размещены поверх всех других подпредставлений, то есть поверх представления конфигурации.Таким образом, вы можете попытаться сделать недействительным таймер при представлении представления конфигурации.

На самом деле вы должны просто использовать UINavigationController или представить контроллер представления конфигурации с presentModalViewControllerAnimated.Почему ты не хочешь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...