Ios 返回导航栏的按钮

Ios 返回导航栏的按钮,ios,delegates,protocols,parameter-passing,Ios,Delegates,Protocols,Parameter Passing,我有两个viewController,viewControllerB,当通过导航栏的后退按钮返回viewControllerA时,我希望您传递一个布尔值。我使用了一个协议,但不起作用 在ViewControllerB.h中 @protocol detailProgrammFiereDelegate <NSObject> @required -(void) addItemViewController: (ViewControllerB *)programmFiere withBo

我有两个viewController,viewControllerB,当通过导航栏的后退按钮返回viewControllerA时,我希望您传递一个布尔值。我使用了一个协议,但不起作用

在ViewControllerB.h中

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

 .....
 @property (nonatomic, weak)id <detailProgrammFiereDelegate>delegate;
 .......
在ViewControllerA.h中

@interface ViewControllerA: UIViewController <detailProgrammFiereDelegate>

在打开ViewControllerB之前,布尔值已为true,不应发生这种情况。

如果要在从B返回a时传递参数,则不应将调用委托方法放入viewDidLoad中。当B是alloc和init时,将调用B的viewDidLoad,但当通过弹出B返回A时,则不会调用。这也是为什么在B出现之前,A的booleanfier已经是YES的原因

你可以把

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

就在B的[self.navigationController popViewControllerAnimated:YES]之前,而不是在B的viewDidLoad中。因此A的-addItemViewController:将在返回时被调用

因此,如果我没有将其放入viewDidLoad中,我必须创建一个方法A purpose?在哪里?如果您没有其他方法返回到viewController A(这意味着您只能使用“后退”按钮返回),您可以将其放在B的-ViewWillEnglish:
-(void)ViewWillEnglish:(BOOL)animated{[super viewWillEnglish:animated];[self.delegate addItemViewController:self with BOOL:booleanFiere];}
如何防止boolean已经是viewControllerB的第一次打开?不要调用[self.delegate addItemViewController:self with bool:booleanFiere];在B的视图中,加载。
-(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];

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