提问者:小点点

在Xcode情节提要中使用展开序列消除Popover


我正在使用Xcode 4.5和新的iOS6功能来展开连接。我在弹出窗口中展示了一个导航视图控制器,该弹出窗口通过条形按钮项以编程方式呈现:

- (IBAction)configChartTapped:(id)sender
{
    if (self.popover.isPopoverVisible) {

        [self.popover dismissPopoverAnimated:YES];

    } else {
        UINavigationController *chartConfigNavigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"GrowthChartNavigationController"];

        ConfigChartTypeViewController *configChartTypeViewController = (ConfigChartTypeViewController*) chartConfigNavigationController.topViewController;

        self.popover = [[UIPopoverController alloc]initWithContentViewController:chartConfigNavigationController];
        self.popover.popoverContentSize = CGSizeMake(320, 500);
        self.popover.delegate = self;

        [self.popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }
}

在这个方法旁边,我定义了一个目标来释放segue(即解除popover)。。。

- (IBAction)cancelConfig:(UIStoryboardSegue *)segue
{
    //
}

...并将其连接到导航视图控制器导航栏中的取消按钮。

将取消栏按钮连接到取消配置按钮在Xcode中工作正常。

然而,在运行代码时,单击Cancel按钮时不会发生任何事情,尽管Xcode 4.5应该支持在展开Segue时取消弹出窗口(根据发布文档)。

我错过了什么?

谢谢你!


共1个答案

匿名用户

展开segue使用运行时搜索,首先要求父视图控制器沿着通过segue呈现的视图控制器链向上移动,直到找到正确的展开方法。但是这里没有链,因为弹出窗口是以编程方式创建的,而不是使用弹出窗口segue。

没有回调,因为没有返回到父视图控制器的segue链接。展开分段是委托的一种抽象形式,因此这类似于忘记设置委托而不接收任何回调。

解决方案是在Interface Builder中使用segue创建弹出窗口,而不是使用configChartTap:方法以编程方式创建它。

步骤:

首先,控制从presenting view controller中的条形按钮项到presented view controller的拖动,并选择popover segue:

在presenting view controller(显示视图控制器)中,实现prepareforsgue(准备)以获取对popover控制器的引用:

- (void)prepareForSegue:(UIStoryboardPopoverSegue *)segue
                 sender:(id)sender {
    self.popover = segue.popoverController;
}

然后实现应执行PerformSegueSupport标识符:以恢复类似于config ChartTap:的显示/隐藏行为:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if (self.popover.isPopoverVisible) {
        [self.popover dismissPopoverAnimated:YES];
        return NO;
    } else {
        return YES;
    }
}

最后,在Interface Builder中,为显示的视图控制器设置正确的popover内容大小:

这将允许您在弹出窗口中单击“取消”按钮时展开到取消配置:,并在单击显示弹出窗口的按钮时显示/隐藏弹出窗口。