2

rootViewControllerとしてUINavigationControllerがあります。これには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];
}

今、私はこれが間違っていることを知っています、そして当然のことながら、それは他の方法に悪影響を及ぼしています。実際、これを入力すると、プロジェクトページが起動時にnavigationControllerに読み込まれますが、splitViewControllerが閉じられるとウィンドウに直接配置されることに気付きました。誰かがこれを達成する正しい方法を説明することによって私を助けることができますか?

ありがとう

4

1 に答える 1

2

AppleによれUISplitViewControllerば、はアプリの最上位のView Controllerである必要があり、アプリの存続期間全体にわたって存在する必要があります。お気づきのように、これを無視すると、すべてが壊れる可能性があります。

MGSplitViewControllerなど、この方法で機能しない代替手段がいくつかあります。グーグル周り。時間があれば、スプリットビューコントローラーの独自の実装を作成して、完全に制御することもできます。

本当にAppleを「クレイジー」な方法で使用したい場合はUIsplitViewController、(Appleの要求に応じて)ルートVCとしてインストールし、常にルートに置いておくことができますが、その上に他のUIをモーダルに表示します。次に、モーダルUIを非表示にして、分割ビューコントローラーを表示します。しかし、これは厄介でハッキーです。

しばらく前に、私は興味があるかもしれない関連する質問をしました:

UISplitViewControllerと他のViewControllerを切り替える最良の方法は?

于 2013-03-01T19:39:20.003 に答える