1

アプリで IIViewDeck を使用できません。ストーリーボードを使用しています。私は、ストーリーボード内の特定のビューコントローラーにセグエするはずのセルを持つテーブルビューコントローラーであるレフトビューコントローラーを持ち込むことができました。どうすればいいですか?これをappdelegateに入れました。

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

UIViewController *menuController = [mainStoryboard    instantiateViewControllerWithIdentifier:@"mainSideNavMenu"];

UINavigationController* navigationController = (UINavigationController *) self.window.rootViewController;
self->viewDeckController =  [[IIViewDeckController alloc] initWithCenterViewController:navigationController leftViewController:menuController rightViewController:nil];
self.window.rootViewController = self->viewDeckController;
4

2 に答える 2

0

少し遅れていることはわかっていますが、誰かがいつか答えが役立つと思うかもしれません。

マックスの答えは一般的に良い答えです。ただし、元の投稿者の質問は少しあいまいです。彼/彼女は、トランジションが中央のビュー コントローラーで必要か、左側のビュー コントローラーで必要かを指定しませんでした。

トランジションが左側のビューコントローラーにあると仮定します。

push transitionが必要な場合は、次のようなコードを使用できます。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0) {
        UINavigationController * nc = (UINavigationController *)self.viewDeckController.leftController;
        UIViewController * vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourView"]; // use the name of the view (not the navigation view controller)
        [nc pushViewController:vc animated:YES];
    }
}

Modal transitionが必要な場合は、前の if ステートメント句内のコードを次のコードに置き換えるだけです。

UIViewController * vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourViewName"]; // don't use the name of a navigation controller
UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentViewController:nc animated:YES completion:nil];

このコードのナビゲーション コントローラーは、ナビゲーション バーを表示するために使用されます。ナビゲーション バーが必要ない場合は、ナビゲーション コントローラーの定義を省略し、代わりにビュー コントローラーをパラメーターとしてpresentViewController: animated: completion:メソッドに渡します。

トランジションが中央のビューコントローラーにあると仮定します。

Max が提供したコードを使用できます。彼が新しいView Controllerを示した方法は、既存の中央のView Controllerを置き換えることであることに注意してください. 新しいビュー コントローラは、プッシュもモーダル表示もされません。新しいビュー コントローラーを既存の中央のビュー コントローラーにプッシュする場合は、上記の前の 2 つのコードで遷移を導入したのと同じ方法を使用する必要があります。したがって、次のようになります。

Push Transition : (次のコードは、最初のコード片の if ステートメント句内のコードを置き換える必要があります)

[self.viewDeckController closeLeftView];
UINavigationController * nc = (UINavigationController *)self.viewDeckController.centerController;
[nc pushViewController:[[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourViewName"] parentViewController] animated:YES];

モーダル プレゼンテーション: (次のコードは、最初のコード片の if ステートメント句内のコードを置き換える必要があります)

[self.viewDeckController closeLeftView];
UINavigationController * center = (UINavigationController *)self.viewDeckController.centerController;
UIViewController * vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"yourViewName"];
UINavigationController * nc = [[UINavigationController alloc] initWithRootViewController:vc];
[center presentViewController:nc animated:YES completion:nil];
于 2015-01-14T12:43:42.780 に答える
0

テーブルビューの didSelectRowAtIndexPath メソッドを使用して、コードで管理できます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIStoryboard*  sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

if (indexPath.row == 0) {
    MyTripsViewController* newController = [sb instantiateViewControllerWithIdentifier:@"ViewController1"];
    [self.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller) {
        self.viewDeckController.centerController = newController;
    }];
}
if (indexPath.row == 1) {
    MyTripsViewController* newController = [sb instantiateViewControllerWithIdentifier:@"ViewController2"];
    [self.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller) {
        self.viewDeckController.centerController = newController;
    }];
}
else {
    MyTripsViewController* newController = [sb instantiateViewControllerWithIdentifier:@"ViewController3"];
    [self.viewDeckController closeLeftViewBouncing:^(IIViewDeckController *controller) {
        self.viewDeckController.centerController = newController;
    }];
}

}

したがって、row / viewController の組み合わせを定義する必要があります。

于 2014-09-22T16:11:57.693 に答える