2013-03-01 5 views
2

У меня есть UINavigationController как мой rootViewController, который содержит UIViewController (который я буду называть проектами ради этого обсуждения). В проектах у меня есть кнопка, которая при нажатии на нее я хочу загрузить UISplitViewController - желательно сдвигаться снизу, хотя это просто приятная функция.UIViewController загрузка UISplitViewController

В UISplitViewController у меня есть кнопка «Закрыть», которую я хочу удалить, повторно просматривая проекты UISplitViewController.

Из того, что я прочитал, UISPlitViewControllers должны быть rootViewControllers. Имея это в виду, мой код до сих пор выглядит следующим образом.

AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    ... 

    // LOAD THE PROJECTS PANEL ROOT VIEW CONTROLLER INTO THE WINDOW 
    ProjectsListViewController *projects = [[ProjectsListViewController alloc] init]; 

    navigationController = [[UINavigationController alloc] initWithRootViewController:projects]; 

    [window setRootViewController:navigationController]; 
    [window makeKeyAndVisible]; 

    return YES; 
    } 

ProjectsViewController

-(IBAction)loadDetails 
{  
    ProjectNavigationController *projectNavPanel = [[ProjectNavigationController alloc] init]; 
    ProjectDetailController *projectDetailPanel = [[ProjectDetailController alloc] init]; 
    ProjectSplitViewController *splitRootController = [[ProjectSplitViewController alloc] init]; 

    [splitRootController setViewControllers:[NSArray arrayWithObjects:projectNavPanel, projectDetailPanel, nil]]; 

    [[self view] removeFromSuperview]; 
    [[appDelegate window] setRootViewController:splitRootController]; 
} 

UISplitViewController Naviagaion

- (void)loadProjects 
{ 
    // LOAD THE PROJECTS LIST BACK INTO VIEW 
    ProjectsListViewController *projectsList = [[ProjectsListViewController alloc] init]; 

    [[[self parentViewController] view] removeFromSuperview]; 
    [[appDelegate window] setRootViewController:projectsList]; 
} 

Теперь я знаю, что это неправильно, и неудивительно, что это оказывает неблагоприятное воздействие на другие методы. Фактически, когда я печатаю это, я заметил, что страница Projects загружается в navigationController при запуске, но помещается непосредственно в окно, когда splitViewController закрыт. Может ли кто-нибудь помочь мне, объяснив правильный метод достижения этого?

Благодаря

ответ

2

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

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

Если вы действительно хотите использовать Apple UIsplitViewController в «сумасшедших» способах, то вы можете установить его как root VC (как требование Apple), и иметь его у корня все время, но затем показывать другие пользовательские интерфейсы по сравнению с наверху. Затем скройте модальный пользовательский интерфейс, чтобы отобразить контроллер разделенного вида. Это неприятно и хаки.

Некоторое время назад я задал соответствующий вопрос, который может представлять интерес:

Best way to switch between UISplitViewController and other view controllers?

Смежные вопросы