I am test the code, I build two uiviewcontroller ,A , B and use navigation .
When I click A Button , it will navigate to B UIviewController.
But I need click the back button on the navigation bar , it will pass a value return to A uiviewcontroller.
But it was not find the selector when I click back button. The log still show 0.
My AViewController header is below:
#import <UIKit/UIKit.h>
#import "BViewController.h"
@interface AViewController : UIViewController<BViewControllerDelegate>
-(void) bViewController:(BViewController *)childViewController sendBackPassValue:(NSString *)value;
@end
AViewController implement file is below:
#import "BViewController.h"
...
-(void) bViewController:(BViewController *)childViewController sendBackPassValue:(NSString *)value
{
NSLog(@"Back Value: %@", value );
}
...
B View Controller header file is below:
#import <UIKit/UIKit.h>
@class BViewController;
@protocol BViewControllerDelegate <NSObject>
-(void) bViewController:(BViewController*) childViewController sendBackPassValue:(NSString*) value;
end
@interface BViewController : UIViewController
@property (strong,nonatomic) NSString *passValue;
@property (weak, nonatomic) id<BViewControllerDelegate> delegate;
@end
B View controller implement file is below: #import "BViewController.h" #import "AViewController.h"
...
- (void)viewDidLoad
{
[super viewDidLoad];
_passValue = @"my pass value";
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(home:)];
self.navigationItem.leftBarButtonItem=newBackButton;
}
-(void)home:(UIBarButtonItem *)sender {
NSLog(@"home button click");
NSLog(@"[_delegate respondsToSelector:@selector(bViewController:sendBackDateTime:)]:%d",[_delegate respondsToSelector:@selector(bViewController:sendBackPassValue:)]);
if( [_delegate respondsToSelector:@selector(bViewController:sendBackPassValue:)])
{
NSLog(@"sendBackPassValue");
[_delegate bViewController:self sendBackPassValue:_passValue];
}
[self.navigationController popToRootViewControllerAnimated:YES];
}
...
But the
NSLog(@"[_delegate respondsToSelector:@selector(bViewController:sendBackDateTime:)]:%d",[_delegate respondsToSelector:@selector(bViewController:sendBackPassValue:)]);
still get 0.
Have any one know what step I was less?
Thank you very much.
--answer--
add this code in AUIViewcontroller.m
it can trigger the delegate.
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
BViewController *nextVC = segue.destinationViewController;
nextVC.delegate = self;
}