ios委托不传递值而不在我的结构中输入respondsToSelector

时间:2015-03-24 10:08:38

标签: ios objective-c delegates

我有类似的问题。但我不知道为什么这个结构。

我想使用delegate传递有关navigationController pushViewController的值。

但结构是Tabs ViewController。 Tabs ViewController嵌入了ContainerViewController。

当我单击TabAUIViewcontroller时。我想传递值使用委托给ResultViewController。(黄色UIViewController将值传递给Blue UIViewController)

如下结构:

enter image description here

在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中的项目。

0 个答案:

没有答案