Мое текущее приложение на appDelegate загружает экран main.xib, который содержит только два изображения фона и логотипа. Этот экран за кодом определяет, зарегистрирован ли пользователь в системе, если он не покажет логин, пока он не отобразит панель.Приложение iOS с несколькими контроллерами просмотра
Приложение было создано как единое приложение просмотра, образец кода AppDelegate:
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
self.Main = [[vcMain alloc] initWithNibName:@"vcMain" bundle:nil];
self.window.rootViewController = self.Main;
[self.window makeKeyAndVisible];
}
else
{
self.MainiPad = [[vcMain_iPad alloc] initWithNibName:@"vcMain_iPad" bundle:nil];
self.window.rootViewController = self.MainiPad;
[self.window makeKeyAndVisible];
}
На main.m я следующее на viewDidLoad:
if (islogged)
{
vcDashboard *vcDash = [[vcDashboard alloc] initWithNibName:@"vcDashboard" bundle:nil];
_ncMain = [[UINavigationController alloc] initWithRootViewController:vcDash];
_ncMain.navigationBar.barStyle = UIBarStyleBlackOpaque;
_ncMain.view.frame = self.view.bounds;
[self.view addSubview:_ncMain.view];
ViewActive = vDash;
}
else
{
vcLogin *login = [[vcLogin alloc] initWithNibName:@"vcLogin" bundle:nil];
login.modalPresentationStyle = UIModalPresentationFormSheet;
login.view.frame = self.view.bounds;
[self presentViewController:login animated:YES completion:nil];
}
Eсть кнопка меню, доступная на панели инструментов, которая предоставляет пользователю ряд вариантов выбора другого экрана, и при нажатии она активирует следующий метод:
- (void)displayView:(NSString *)strView Notification:(NSNotification *)notification{
if(_ncMain)
{
[_ncMain.view removeFromSuperview];
_ncMain = nil;
}
if ([strView isEqual: @"Dashboard"])
{
vcDashboard *vcDash = [[vcDashboard alloc] initWithNibName:@"vcDashboard" bundle:nil];
_ncMain = [[UINavigationController alloc] initWithRootViewController:vcDash];
_ncMain.navigationBar.barStyle = UIBarStyleBlackOpaque;
_ncMain.view.frame = self.view.bounds;
[self.view addSubview:_ncMain.view];
ViewActive = vDash;
}
else if ([strView isEqual: @"Catalog"])
{
vcCatalog *vcCat = [[vcCatalog alloc] initWithNibName:@"vcCatalog" bundle:nil];
_ncMain = [[UINavigationController alloc] initWithRootViewController:vcCat];
_ncMain.navigationBar.barStyle = UIBarStyleBlackOpaque;
_ncMain.view.frame = self.view.bounds;
[self.view addSubview:_ncMain.view];
ViewActive = vCatalog;
}
else if ([strView isEqual: @"News"])
{
vcNews *vcNew = [[vcNews alloc] initWithNibName:@"vcNews" bundle:nil];
_ncMain = [[UINavigationController alloc] initWithRootViewController:vcNew];
_ncMain.navigationBar.barStyle = UIBarStyleBlackOpaque;
_ncMain.view.frame = self.view.bounds;
[self.view addSubview:_ncMain.view];
ViewActive = vNews;
}
}
Мои сомнения вот я, кажется, не знаю, если это правильный способ переключения между экранами, когда выбрана опция из этого меню и, если это право всегда addSubview к главному экрану. Не знаю, является ли использование шаблона navigationcontroller решением. Я занимаюсь памятью, потребляемой приложением, когда делаю все это, также я использую ARC в проекте.
Посмотрите на шаблон сдерживания зрения в ios. У Viewcontrollers могут быть подчиненные контроллеры со своими представлениями. Его очень аккуратный и элегантный способ взломать ваше приложение на небольшие подключаемые компоненты. –