2013-03-01 51 views
2

我有一個UINavigationController作爲我的rootViewController,它包含一個UIViewController(我將爲此討論調用項目)。在Projects中,我有一個按鈕,點擊後,我想加載一個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

蘋果公司說,一個UISplitViewController必須在你的應用程序,最上面的視圖控制器,它必須在那裏爲你的應用程序的整個生命週期。正如你已經注意到,如果你忽略這一點,一切都可以打破

有一些替代方法不會這樣,例如, MGSplitViewController。谷歌周圍。如果你有時間,你甚至可以自己實現分割視圖控制器並完全控制。

如果你真的想用「瘋狂」的方式使用蘋果的UIsplitViewController,那麼你可以將它安裝爲root VC(如蘋果的需求),並始終在根目錄下,但隨後以模態方式顯示其他UI它的頂部。然後隱藏模式UI以使分割視圖控制器出現。儘管如此,這很討厭而且很討厭。

前陣子我問一個相關的問題可能會感興趣:

Best way to switch between UISplitViewController and other view controllers?

相關問題