0

カスタム UIActionSheet (ViewController で構成される) を実装しようとしています

- (IBAction)ShowMenu:(id)sender
{
   [self.navigationController.view addSubview:self.menuViewController.view];
   [self.menuViewController setTest:YES];
   [self.menuViewController viewWillAppear:YES];
}

ここで MenuViewController には、選択するオプションがほとんどないテーブルビューがあります。選択した後、それぞれの ViewController を開きます。menu1 をクリックしてから menu1ViewController を開いたところ、正常に動作したとします。このviewControllerを閉じると、dismissViewControllerが呼び出されます。

そしてmenuViewControllerで、menuviewControllerでアニメーション化するコードを下に書きましたが、正常に動作します。

ただし、MenuView の親は TestViewController であり、その内部では、menuviewController がアニメーション化されたときに関数 viewdidAppear が呼び出されません。

それが私の問題です

このコードを使用して、menuViewController で下にアニメーション化しています

- (void) slideOut {


  [UIView beginAnimations:@"removeFromSuperviewWithAnimation" context:nil];

    // Set delegate and selector to remove from superview when animation completes
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

    // Move this view to bottom of superview
    CGRect frame = self.menusheet.frame;
    frame.origin = CGPointMake(0.0, self.view.bounds.size.height);
    self.menusheet.frame = frame;

    [UIView commitAnimations];
}

// Method called when removeFromSuperviewWithAnimation's animation completes
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    if ([animationID isEqualToString:@"removeFromSuperviewWithAnimation"]) {
        [self.view removeFromSuperview];
    }
}

MenuViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if(m_test)
    {
        [self slideIn];
        m_test = FALSE;
    }
    else
    {
        [self slideOut];       
    }

}
4

1 に答える 1

3

私見で-[UIViewController viewWillAppear]あり-[UIViewController viewDidAppear]、ナビゲーションコントローラー、タブバーコントローラーなどのコンテナーのようなコントローラーによって、呼び出し先がビューコントローラー階層に追加された場合にのみ呼び出されます。

addSubview:コードを呼び出してビューを追加しただけでは呼び出されません。も参照してください

アニメーションの有無にかかわらず、呼び出しの前後に、必要に応じてプログラムでコードを-viewWillAppear呼び出すことができます。-viewDidAppearaddSubview:

于 2012-12-12T10:03:30.940 に答える