2012-11-05 52 views
1

我有三個控制器和我想kown控制器是一個推或彈出IOS我怎麼知道該控制器是一個「推」或退回「啪」

控制器:

{ 
    if(!b) 
    b = [B alloc] init]; 
    [self.navigationController pushViewController:b animated:YES]; 
} 

乙控制器:

- (void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    //I want here to judge, from the "A" push over, or to return from the "C" "pop" 

    //if it is push from A 
    //dosomething..... 


    //if it is pop from C 
    //dosomething 
} 
-(void)testAction:(id)sender 
{ 
    C *c = [[C alloc] init]; 
    [self.navigationController pushViewController:b animated:YES]; 
    [c release]; 
} 

C控制器:

{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

謝謝。

+0

我不明白,請解釋一下 –

+0

我不得不解決我的問題。你可以得到它嗎? – zt9788

回答

0

EDIT

Add UINavigationControllerDelegate in .h file 

而且這樣做:下面

[self.yournavController setDelegate:self]; 

方法是navigation controller delegate被稱爲當導航控制器shows通過的一個pushpopsettingtop view controllerview controller stack

添加這種方法

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 

} 
+0

謝謝。這是工作。 – zt9788

+0

我很抱歉。當C控制器向B彈出那個navigationController沒有工作時,我用A推B導航控制器的功能不起作用。爲什麼? – zt9788

+0

檢查編輯答案..... –

5

看一看在的UIViewController方法,isMovingToParentViewController。如果由於視圖控制器被按下而顯示視圖控制器,這將返回YES,但如果由於另一個視圖控制器從堆棧彈出而顯示,則返回NO。

-(void)viewDidAppear:(BOOL)animated { //Code in view controller B 
    [super viewDidAppear:animated]; 
    NSLog(@"isMovingToParentViewController: %d",self.isMovingToParentViewController); 
    // this will log 1 if pushing from A but 0 if C is popped 
} 
+0

感謝您的支持。 – zt9788

+0

謝謝,但它不工作 – zt9788

+0

@ zt9788,我測試過了,它確實有效。你把方法放在viewDidAppear:animated:方法中了嗎?這就是它所屬的地方。 – rdelmar

0

嗯,我覺得對於你需要跟蹤一個全局變量,知道無論是從推送或C.流行什麼我會做的是:

  1. 聲明一個變量BOOLisPush在appDelegate或一些外部.h文件中進行合成。

  2. 當你從A到B,即它是一個推,使其在A.等於 「YES」

yourAppDelegate *myDelegate = (yourAppDelegate*) [[UIApplication SharedApplication] delegate]; 

myDelegate.isPush = YES; 

類似地選自C彈出之前,使isPush = NO值;

  1. 在B的viewDidLoad中,查看變量的值。
yourAppDelegate *myDelegate = (yourAppDelegate*) [[UIApplication SharedApplication] delegate]; 

if(myDelegate.isPush) 
//means A was pushed 

else 
//means C was popped 
+0

謝謝。這種解決方案不是我想要的。 – zt9788

相關問題