переключение между контроллерами uiview без управления навигатором пользовательского интерфейса - PullRequest
2 голосов
/ 11 мая 2011

Я хочу переключаться между двумя классами UIViewController программно без какого-либо дополнительного элемента управления пользовательского интерфейса, например UITabBarController, который добавляет пользовательский интерфейс в приложение.

Мой основной загружает первый контроллер представления с addSubView.

    vc1 = new viewc1();
    window.AddSubview(vc1.View);
    window.MakeKeyAndVisible ();    

Я могу загрузить свой второй viewcontroller из первого с помощью PresentModalViewController

    vc2 = new viewc2();
    PresentModalViewController(vc2, true);

но мне нужно переключаться вперед и назад и выпускать старые контроллеры view для экономии памяти. Каков наилучший способ сделать это? DismissModalViewControllerAnimated (false); во 2-м контроллере представления не освобождает память, и я не хочу модальные "окна", поскольку это не кажется оптимальным. У меня есть пользовательский интерфейс, поэтому контроллер панели вкладок не нужен.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

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

Так пусть ваш основной код будет

if(vc1==nil)
  vc1 = new viewC1();
window.addSubView(vc1.view);
window.MakeKeyAndVisible ();

И ваш код коммутатора будет

if(vc2==nil)
   vc2 = new viewC2();
if(vc1.view.superview!=nil){
   vc1.view.removefromSuperView();
   window.addsubview(vc2.view);
} else {
   vc2.view.removeFromSuperView();
   window.addsubview(vc1.view);
}

Теперь в методе dealloc добавьте

vc1.release();
vc2.release();

Вот так ... Надеюсь, это поможет ... Я просто следовал вашему синтаксису

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

Вы можете использовать UINavigationController по-прежнему, вам не нужен дополнительный интерфейс, который он предоставляет.Вы можете использовать. Hidden свойство UINavigationBar, чтобы скрыть это.Для переключения между видами вы можете просто нажать PushViewController(controller, animated), чтобы выдвинуть новый вид.Если вы хотите освободить старый контроллер, тогда вы можете просто установить свойство UINavigationController .ViewControllers, используя:

navigationController.ViewControllers = new UIViewController[1]{ vc2 };

, это удалит ссылку на первый контроллер и сделает второй контроллер корневым,(это также будет работать наоборот!)

...