0

viewControllerB の 2 つの viewController があり、navigationBar の戻るボタンから viewControllerA に戻るときに、ブール値を渡してほしい。プロトコルを使用しましたが、機能しません。

ViewControllerB.h 内

 @protocol detailProgrammFiereDelegate <NSObject>
 @required
 -(void) addItemViewController: (ViewControllerB *)programmFiere withBool:(BOOL)booleanFiere;
 @end

 .....
 @property (nonatomic, weak)id <detailProgrammFiereDelegate>delegate;
 .......

ViewControllerB.m で

- (void)viewDidLoad
{
     ......

     BOOL booleanFiere =YES;
    [self.delegate addItemViewController:self withBool:booleanFiere];
 }

ViewControllerA.h 内

@interface ViewControllerA: UIViewController <detailProgrammFiereDelegate>

ViewControllerA.m で

-(void)addItemViewController:(DetailProgrammFiere *)programmFiere withBool:(BOOL)booleanFiere{

     //after pressing back button of viewControllerB not enter into this method. Why?

    if (booleanFiere){ //is already true before opening the ViewControllerB. Why?
        [self viewDidLoad];
    }
}
........

 -(void)getInformationsFiere:(id)sender{ //method that open ViewControllerB

     ViewControllerB * detailFiere =[[ViewControllerB alloc]initWithNibName:@"ViewControllerB~iPhone" bundle:nil];


    detailFiere.delegate =self;


    [self.navigationController pushViewController:detailFiere animated:YES];

   }

ブール値は、ViewControllerB を開く前に既に true であり、これは発生しないはずです。

4

1 に答える 1

1

B から A に戻りたいときにパラメーターを渡したい場合は、呼び出し元のデリゲート メソッドを viewDidLoad に配置しないでください。B の viewDidLoad は、B が alloc および init のときに呼び出されますが、pop B によって A に戻るときは呼び出されません。これが、B が表示される前に A の booleanFiere がすでに YES である理由でもあります。

あなたが置くことができます

    [self.delegate addItemViewController:self withBool:booleanFiere];

BのviewDidLoadではなく、Bの[self.navigationController popViewControllerAnimated:YES]の直前。したがって、A の -addItemViewController: は戻り時に呼び出されます

于 2012-12-12T09:47:47.530 に答える