6

私は SplitViewController ベースのアプリを持っています。これは、他の UIViewController を呼び出して、詳細セクションに置き換えて表示されます...

パラメータ、情報、オブジェクトを送信すると、MasterViewController のセグエを使用してすべてが正常に機能します

しかし、私の UIViewControllers のいくつかは、Segues を使用して他の UIViewControllers とやり取りするため、それらを正常に動作させるには、それらを UINavigationController 内に埋め込む必要があります。

私の質問は:

セグエが実行されているときに UINavigationController を segue.destinationViewController に追加する方法:

  1. masterViewController からパラメータを渡す
  2. Segues を使用して UIViewControllers が他の ViewControllers とやり取りできるようにする

私は解決策を考えました: -MasterViewControllerでカスタムデリゲートまたはプロトコルを作成することによるパラメータの問題 -UIViewControllersを埋め込むことにより、ストーリーボードのデザインモードでそれらを追加することによるUINavigationControllersの問題

しかし、縦向きモードでMasterViewControllerを表示するボタンを表示するために、UISplitViewControllerのデリゲートをdestinationViewControllerに設定する必要があります...

私の ViewController を保持する UINavigationControllers を持つ prepareForSegue メソッドでそれを設定した場合、代わりに UISplitViewController のデリゲートを UINavigationController に設定します。

助けてくれてありがとう


編集:これは私がそれを解決するために見つけた方法でした:

最初に IBAction をボタンに割り当てました。デバイスが iPad でない場合は、通常のセグエを実行します...

- (IBAction)openExecutives:(id)sender {
    if ([[[UIDevice currentDevice]model] hasPrefix:@"iPad"]) {
        UsersListVC    *rightViewController    = [self.storyboard instantiateViewControllerWithIdentifier:@"UsersListVC"];
        [self showSplitViewController:rightViewController];
    }
    else
        [self performSegueWithIdentifier:@"viewSceneExecutives" sender:self];
}

これは、カスタムの詳細を使用して SplitView を作成するために開発した関数です...

-(void)showSplitViewController:(id)rightViewController{

    UIStoryboard *mainStoryboard        = [UIStoryboard storyboardWithName:@"iPad2" bundle: nil];

    UINavigationController  *leftNavController;
    UINavigationController  *rightNavController;

    MainMenuVC      *leftViewController     = [mainStoryboard instantiateViewControllerWithIdentifier:@"MainMenuVC"];

    leftNavController                   = [[UINavigationController alloc] initWithRootViewController:leftViewController];
    rightNavController                  = [[UINavigationController alloc] initWithRootViewController:rightViewController];

    leftNavController.toolbarHidden     = FALSE;
    rightNavController.toolbarHidden    = FALSE;


    UISplitViewController   *splitViewController    = [[UISplitViewController alloc] init];

    splitViewController.viewControllers             = [NSArray arrayWithObjects:leftNavController, rightNavController, nil];

    splitViewController.delegate        = rightViewController;

    self.view.window.rootViewController = splitViewController;
}

私がしたことは、パラメーター(UIViewController)を必要とする関数を作成することにより、最初からsplitViewControllerを再描画することだけです

4

1 に答える 1