如何将参数传递给导航控制器内的弹出视图控制器

时间:2012-11-27 19:25:39

标签: ios storyboard uipopovercontroller navigationcontroller

我在detailviewcontroller的导航栏中有一个带有splitview和右侧条形按钮的iPad应用程序。

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

enter image description here

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

我的问题是我需要将参数传递给第一个表视图才能正确配置它。

当视图控制器共享同一个导航控制器时,我习惯这样做。

- (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,但导航控制器和导航控制器当然没有“property1”和“property2”。

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

如何配置我的tableview,通过分配我在导航控制器中使用时定义的一些属性?

2 个答案:

答案 0 :(得分:4)

所有的功劳都属于@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;
}

答案 1 :(得分:0)

我不完全确定我会关注,因为故事板对我来说有点小。但是你似乎在你的代码中创建了一个闪闪发光的新popoverFirstTVC,然后通过作业抛弃它

popoverFirstTVC = segue.destinationViewController;

如果您对该行发表评论,那么请写下

segue.destinationViewController.itsPopover = popoverFirstTVC;

然后你可以将完全构建和初始化的popoverFirstTVC传递下来,并让第二个VC中的代码选择并运行它。当然,你需要

@property (strong, readwrite) MyPopoverFirstTableViewController * itsPopover;

在第二个VC的标题中。