如何将parameter passing给导航控制器内的弹窗视图控制器

我在detailviewcontroller的导航栏中有一个带有分割视图和右侧栏button的iPad应用程序。

此button调用由导航控制器和两个表视图组成的popup窗口。 如下图所示

在这里输入图像说明

由于故事板上的图片很小,我添加了一些解释。 White控制器是detailViewController(位于splitviewcontroller的右侧),位于导航控制器内部。 白色视图右侧的三个视图是从左到右:navigationController,firstTableView,secondTableView。

我的问题是我需要传递参数到第一个表视图来正确configuration它。

我使用这样做时,视图控制器共享相同的导航控制器。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([[segue identifier] isEqualToString:@"popoverButtonSegue"]){ MyPopoverFirstTableViewController *popoverFirstTVC = [[MyPopoverFirstTableViewController alloc] init]; popoverFirstTVC = segue.destinationViewController; popoverFirstTVC.property1 = aProperty1; popoverFirstTVC.property2 = aProperty2; } } 

我的问题是,我得到一个错误,因为目标控制器不是我的popoverFirstTableViewController,但NavigationController和导航控制器当然不haver“property1”和“property2”。

也许这是一个基本的问题,但我卡在这里。

我该怎么做configuration我的tableview通过分配一些它的属性,当这个表是在导航控制器中定义的?

所有的信用都属于@Michael Kernahan,但只要他不把它作为答案,我会把它作为跟进寻找相同的答案的人。

在我的情况下,问题是我分配目标控制器是导航控制器

 popoverFirstTVC = segue.destinationViewController; 

我应该做的是访问该导航控制器的topViewController。

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([[segue identifier] isEqualToString:@"popoverButtonSegue"]){ MyPopoverFirstTableViewController *popoverFirstTVC = (MyPopoverFirstTableViewController *)((UINavigationController *) segue.destinationViewController).topViewController; popoverFirstTVC.property1 = aProperty1; popoverFirstTVC.property2 = aProperty2; } 

我并不完全相信我会遵循,因为故事板有点儿让我读。 但是你在你的代码中似乎已经创build了一个闪闪发光的popoverFirstTVC,然后通过这个任务把它扔掉了

 popoverFirstTVC = segue.destinationViewController; 

如果你评论这条线,然后在那末写

 segue.destinationViewController.itsPopover = popoverFirstTVC; 

那么你可以通过你的完全构build和初始化的popoverFirstTVC,并在第二个VC中的代码拿起它并运行。 当然,你需要

 @property (strong, readwrite) MyPopoverFirstTableViewController * itsPopover; 

在你的第二个VC的标题。