2012-12-12 82 views
0

我想實現一個自定義UIActionSheet(由一個視圖控制器的) 我添加了一個視圖控制器作爲一個子視圖我rootView的navigationcontrollerviewWillAppear中不叫

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

這裏MenuViewController有tableview有幾個選項可供選擇。選擇後,我打開各自的ViewControllers。假設我點擊了menu1,然後打開menu1ViewController,它工作正常。現在,當我關閉這個viewController時,我打電話給dismissViewController。

和menuViewController我寫的代碼通過menuviewController動畫向下並能正常工作。

但MenuView的父母是TestViewController其內部viewdidAppear不叫的職能時menuviewController動畫下來。

和多數民衆贊成我的問題,

我使用這個代碼由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];  
    } 

} 
+0

請格式化代碼,以便其他人可以理解... –

+1

'MenuViewController -viewWillApper :, -viewdidAppear:'代碼嗎? –

+0

它看起來像你TestViewController實際上停留在視圖層次結構(即它是可見的),所以沒有viewWillAppear將被調用。從文檔:viewWillAppear [「通知視圖控制器其視圖即將添加到視圖層次結構」(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference的.html#// apple_ref/OCC/instm/UIViewController中/ viewWillAppear中:) –

回答

3

恕我直言,-[UIViewController viewWillAppear]-[UIViewController viewDidAppear]只會被稱爲在被調用者被類似容器的控制器添加到視圖控制器層次結構中,如導航控制器,選項卡酒吧控制器。

如果你只是在你的代碼中調用addSubview:添加視圖它不會被調用。 See also

你可以在你的代碼中調用-viewWillAppear-viewDidAppear在適當情況下,編程,你帶或不帶動畫稱爲addSubview:之前和之後。

+0

謝謝回覆,所以我應該如何解決這個問題以及我在這裏做了什麼錯誤 – Ranjit

+0

我沒有得到你的答案 – Ranjit

+0

@Ranjit將子視圖添加和動畫化爲'TestViewController'視圖不會調用ViewWillAppear,viewDidAppear,viewWillDisappear和ViewDidDisappear TestViewController。您可以手動調用它們(或您希望準備的任何其他方法)。 –

相關問題