我在detailviewcontroller的导航栏中有一个带有splitview和右侧条形按钮的iPad应用程序。
此按钮调用由导航控制器和两个表视图组成的弹出窗口。 如下图所示
由于故事板在图片上很小,我添加了一些解释。 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,通过分配我在导航控制器中使用时定义的一些属性?
答案 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的标题中。