4

セグエの準備でセグエが呼び出すコントローラーを変更する方法はありますか?埋め込まれたセグエでセグメント化されたコントロールが変更されたときに、それを実行しようとしています。ありがとう!

4

2 に答える 2

8

お気づきかもしれませんが、セグエdestinationViewControllerreadonly. より良い戦略は、セグメント化されたコントロール (ビューまたはコントロールではなく) を保持するビュー コントローラーと、選択する他のビュー コントローラーとの間でセグエを定義することです。選択したセグメントに基づいて決定しperformSegueWithIdentifier:sender:、セグメントに一致する識別子を使用してコントローラーのコードから呼び出します。

于 2012-11-28T19:07:45.433 に答える
5

どのコントローラーが組み込みコントローラーであるかを切り替えたい場合は、Apple が使用するカスタム コンテナー ビュー コントローラー パラダイムを使用する必要があると思います。以下のコードは、それを行う小さなテストアプリからのものです。これは、単一のコントローラー テンプレートを使用してセットアップされ、コンテナー ビューがそのコントローラー (ViewController と呼ばれる) に追加され、セグメント化されたコントロールがメイン ビューに追加されました。次に、切断されたビュー コントローラーを追加し、そのサイズを自由形式に変更してから、そのビュー サイズを埋め込みコントローラーのビュー サイズと同じになるように調整しました。ViewController.h のコードは次のとおりです。

@interface ViewController : UIViewController

@property (weak,nonatomic) IBOutlet UIView *container;
@property (strong,nonatomic) UIViewController *initialVC;
@property (strong,nonatomic) UIViewController *substituteVC;
@property (strong,nonatomic) UIViewController *currentVC;

@end

そして、これは私がViewController.mに持っているものです:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.initialVC = self.childViewControllers.lastObject;
    self.substituteVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Substitute"];
    self.currentVC = self.initialVC;
}

-(IBAction)SwitchControllers:(UISegmentedControl *)sender {
    switch (sender.selectedSegmentIndex) {
        case 0:
            if (self.currentVC == self.substituteVC) {
                [self addChildViewController:self.initialVC];
                self.initialVC.view.frame = self.container.bounds;
                [self moveToNewController:self.initialVC];
            }
            break;
        case 1:
            if (self.currentVC == self.initialVC) {
                [self addChildViewController:self.substituteVC];
                self.substituteVC.view.frame = self.container.bounds;
                [self moveToNewController:self.substituteVC];
            }
            break;
        default:
            break;
    }
}


-(void)moveToNewController:(UIViewController *) newController {
    [self.currentVC willMoveToParentViewController:nil];
    [self transitionFromViewController:self.currentVC toViewController:newController duration:.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{}
                            completion:^(BOOL finished) {
                                [self.currentVC removeFromParentViewController];
                                [newController didMoveToParentViewController:self];
                                self.currentVC = newController;
                            }];
}
于 2012-11-29T17:13:47.310 に答える