4

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

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

在此处输入图像描述

由于图片上的故事板很小,我添加了一些解释。白色控制器是 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 而是 NavigationController 和导航控制器当然没有“property1”和“property2”。

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

当该表位于导航控制器内时,如何通过分配我定义的一些属性来配置我的表视图?

4

2 回答 2

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;
}
于 2012-11-29T16:41:35.803 回答
0

我不完全确定我是否遵循,因为故事板对我来说有点小。但是您似乎在您的代码中创建了一个闪闪发光的新 popoverFirstTVC,然后通过分配将其丢弃

popoverFirstTVC = segue.destinationViewController;

如果您将该行注释掉,那么最后写

segue.destinationViewController.itsPopover = popoverFirstTVC;

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

@property (strong, readwrite) MyPopoverFirstTableViewController * itsPopover;

在您的第二个 VC 的标题中。

于 2012-11-27T20:28:37.767 回答