1

私は 3 つのコントローラーを持っており、コントローラーがプッシュまたはポップであることを知りたい

コントローラ:

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

B コントローラー:

- (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];
}

ありがとう。

4

3 に答える 3

7

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
}
于 2012-11-05T05:29:57.663 に答える
0

編集

Add UINavigationControllerDelegate in .h file

また、これを行います:

[self.yournavController setDelegate:self];

以下のメソッドはnavigation controller delegate、ナビゲーションコントローラーが、、またはのを介してshows新しいときに呼び出されます。top view controllerpushpopsettingview controller stack

このメソッドを追加します

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

}
于 2012-11-05T05:27:38.597 に答える
0

うーん、そのためには、A からのプッシュか C からのポップかを認識しているグローバル変数を追跡する必要があると思います。

  1. appDelegate または外部の .h ファイルでBOOL変数を宣言し、合成します。isPush

  2. A から B に移動する場合、つまりプッシュの場合は、A で「YES」に等しくします。

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

myDelegate.isPush = YES;

同様に、C からポップする前に、値をisPush = NO;にします。

  1. B'sviewDidLoadでは、変数の値を参照してください。
yourAppDelegate *myDelegate = (yourAppDelegate*) [[UIApplication SharedApplication] delegate];

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

else
//means C was popped
于 2012-11-05T05:36:25.147 に答える