7

「A」、「B」、「C」というラベルの付いた3つのView Controllerがあるとしましょう。現在、「A」はウィンドウの rootViewController であり、ボタンがタップされると「B」がモーダルに表示されます。"B" では、ボタンがタップされると "A" によって閉じられ、"A" はすぐに C をモーダルに表示します。この目標を達成することを期待して私のコードを次に示しますが、そうすることに失敗しました。

「A」viewController では、ヘッダー ファイルでブロックを保持するプロパティを宣言し、「B」viewController が「A」によって閉じられたときに呼び出されるようにしました。

@property (nonatomic, copy) void (^presentZapLaunch)(void);

これが「A」のviewControllerのプレゼンスメソッドで「B」を提示する

-(void)presentNextViewCon
{
CYCGestureZapZapViewController *gestureViewCon = [[CYCGestureZapZapViewController alloc]init];

if (!self.presentZapLaunch) {
    __weak CYCZapZapViewController *weakRefCon = self;

    self.presentZapLaunch = ^{
        CYCZapZapViewController *preventWeakRefCon = weakRefCon;

        CYCZapZapLaunchViewController *zapLaunch = [[CYCZapZapLaunchViewController     alloc]init];
        NSLog(@"Called");
        [preventWeakRefCon presentViewController:zapLaunch animated:YES completion:nil];

    };
}


[self presentViewController:gestureViewCon animated:YES completion:nil];

}

これは、「A」によって却下される「B」却下方法であり、「A」は「C」をすぐに提示する必要があります

-(void)presentNextViewCon
{
NSLog(@"Hello");
[self.presentingViewController dismissViewControllerAnimated:self completion:^{[(CYCZapZapViewController *)self.presentingViewController presentZapLaunch];}];

}

*ウィンドウの rootViewController として "A" ビュー コントローラーを使用しており、"A" は "B" ビュー コントローラーをモーダルに表示することに注意してください。「A」、「B」、「C」はすべてView Controllerです。

4

4 に答える 4

2

あなたはボタンについて取っていますが、それをcontrolButtonと名付けましょう。カスタムinitメソッドを使用して、そのボタンを B および C に渡します。つまり、 UIViewController A に controllButton 参照があることを意味します。メソッドの使用

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

トリガーブロックをAに設定し、このようにします

[_controllButton addTarget:self action:@selector(controllButtonTapped:)....];

- (void)controllButtonTapped:(id)sender {

    [self dismissViewControllerAnimated:YES completion:^{

        // present you c here

        [self presentViewController:c animated:YES completion:NULL];
    }];
}

しかし、最良の選択肢は、コーディネーターが現在のアクションと却下アクションを調整する「メディエーター デザイン パターン」を使用することです。

于 2014-05-29T10:19:46.013 に答える
1

B を却下し、C を提示することはできません。

このタスクを実行するには、いくつかのタスクに従う必要があります。

  • 'B' のボタンを押すと、アニメーションなしで 'B' を無視し、グローバル BOOL 変数を設定して、'C' を提示することを通知します。
  • On -(void)viewDidAppear:(BOOL)「A」のアニメーション

    if (bool){ [self presentViewController:c animation:YES 完了:nil]; }

于 2014-05-29T10:41:18.580 に答える