0

ビューを持つ2つのView Controllerがあります。1 つ目はログイン画面で、2 つ目は Web から情報を取得します (関係ありません)。

私はカスタムセグエアニメーションを使用し、スーパービューで奇妙なことをして、sourceViewController.viewをdestinationViewController.viewの(視覚的に)「上」にする必要がありました

これが、2 番目のビューから IBAction メソッドを呼び出そうとすると呼び出されない理由であるとしか思えません。

セグエ クラスの実装は次のとおりです。

- (void) perform {

    UIViewController *sourceViewController = (UIViewController *) self.sourceViewController;
    UIViewController *destinationViewController = (UIViewController *) self.destinationViewController;

    UIView *parent = sourceViewController.view.superview;
    [sourceViewController.view removeFromSuperview];
    [parent addSubview: destinationViewController.view];
    [parent addSubview:sourceViewController.view];
    sourceViewController.view.layer.masksToBounds = NO;
    sourceViewController.view.layer.cornerRadius = 8; // if you like rounded corners
    sourceViewController.view.layer.shadowOffset = CGSizeMake(0,0);
    sourceViewController.view.layer.shadowRadius = 10;
    sourceViewController.view.layer.shadowOpacity = 1;

    destinationViewController.view.frame = CGRectMake(0, 20, destinationViewController.view.frame.size.width, destinationViewController.view.frame.size.height);
    sourceViewController.view.frame = CGRectMake(0, 20, sourceViewController.view.frame.size.width, sourceViewController.view.frame.size.height);

    [UIView animateWithDuration:.6
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{

                         sourceViewController.view.frame = CGRectMake(-sourceViewController.view.frame.size.width-10, 20, sourceViewController.view.frame.size.width, sourceViewController.view.frame.size.height);
                     }
                     completion:^(BOOL finished){
                         //[destinationViewController.view removeFromSuperview];
                         [sourceViewController.navigationController pushViewController:destinationViewController animated:NO];
                     }];
}

私の質問は、スーパービューからソース ビューを削除して、2 番目のビューで IBActions が呼び出される方法を台無しにすることはできますか?

IBAction メソッドは、たとえばボタンを押したときにアプリをクラッシュさせるだけです。

4

1 に答える 1

0

コードを次のように変更して問題を修正しました。

UIViewController *sourceViewController = (UIViewController *) self.sourceViewController;
    UIViewController *destinationViewController = (UIViewController *) self.destinationViewController;
UIView *parent = sourceViewController.view.superview;
[parent addSubview:destinationViewController.view];
[parent sendSubviewToBack: destinationViewController.view];
    sourceViewController.view.layer.masksToBounds = NO;
    sourceViewController.view.layer.cornerRadius = 8; // if you like rounded corners
    sourceViewController.view.layer.shadowOffset = CGSizeMake(0,0);
    sourceViewController.view.layer.shadowRadius = 10;
    sourceViewController.view.layer.shadowOpacity = 1;
destinationViewController.view.frame = CGRectMake(0, 20, destinationViewController.view.frame.size.width, destinationViewController.view.frame.size.height);
    sourceViewController.view.frame = CGRectMake(0, 20, sourceViewController.view.frame.size.width, sourceViewController.view.frame.size.height);

    [UIView animateWithDuration:.6
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{

                         sourceViewController.view.frame = CGRectMake(-sourceViewController.view.frame.size.width-10, 20, sourceViewController.view.frame.size.width, sourceViewController.view.frame.size.height);
                     }
                     completion:^(BOOL finished){
                         [sourceViewController presentViewController:destinationViewController animated:NO completion:NULL];
                     }];

いくつかの変更がありましたが、特に使用したのは

[sourceViewController presentViewController:destinationViewController animated:NO completion:NULL];

コントローラを適切に初期化します。これが将来他の誰かに役立つことを願っています。

于 2012-09-17T20:37:35.850 に答える