我有类似的问题。但我不知道为什么这个结构。
我想使用delegate传递有关navigationController pushViewController的值。
但结构是Tabs ViewController。 Tabs ViewController嵌入了ContainerViewController。
当我单击TabAUIViewcontroller时。我想传递值使用委托给ResultViewController。(黄色UIViewController将值传递给Blue UIViewController)
如下结构:
在RootUIViewController.h(绿色)中,我添加了ResultViewController属性。
RootViewController.h
@interface RootViewController : UIViewController
- (IBAction)rootBtnChangePageAction:(id)sender;
@property (nonatomic,strong) ResultViewController *resultVC;
@end
RootViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
self.resultVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ResultViewController"];
}
然后我在TabAUIViewController(黄色)中设置协议和委托方法。
TabAUIViewController.h
@class TabAUIViewController;
@protocol TabAUIViewControllerDelegate <NSObject>
@optional
-(void) tabAVC:(TabAUIViewController*)tabAVC passValue:(NSString*) str;
@end
@interface TabAUIViewController : UIViewController
@property (nonatomic,assign) id<TabAUIViewControllerDelegate> delegate;
- (IBAction)tabABtnAction:(id)sender;
@end
在TabAUIViewController.m中,我声明了resultVC并调用了parentViewController.parentViewController来传递值。
TabAUIViewController.m
@interface TabAUIViewController()
{
ResultViewController *resultVC;
}
@end
@implementation TabAUIViewController
- (void)viewDidLoad {
[super viewDidLoad];
resultVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ResultViewController"];
}
- (IBAction)tabABtnAction:(id)sender {
RootViewController* tempRootVC = (RootViewController*)self.parentViewController.parentViewController;
NSLog(@"tabABtnAction");
if( [self.delegate respondsToSelector:@selector(tabAVC:passValue:)])
{
NSLog(@"respondsToSelector");
[self.delegate tabAVC:self passValue:@"test"];
}
[tempRootVC.navigationController pushViewController:resultVC animated:YES];
}
@end
然后在 ResultViewController.m 中,我添加了委托。
但是我无法获得委托方法中的值。
ResultViewController.m
@interface ResultViewController ()<TabAUIViewControllerDelegate>
{
TabAUIViewController *tabAVC;
}
@end
@implementation ResultViewController
- (void)viewDidLoad {
[super viewDidLoad];
tabAVC = [self.storyboard instantiateViewControllerWithIdentifier:@"TabAUIViewController"];
tabAVC.delegate = self;
}
// tab a delegate method
-(void) tabAVC:(TabAUIViewController *)tabAVC passValue:(NSString *)str
{
NSLog(@"str:%@",str);
}
我无法在ResultViewController.m中获取值
我曾尝试追踪日志,没有进入
[self.delegate respondsToSelector:@selector(tabAVC:passValue :)]方法。
如何使用pushViewController和委托传递此结构中的值?
有人可以使用委托来解决问题吗?
非常感谢。
我上传了测试项目并简化了here中的项目。