当前位置: 首页 > 知识库问答 >
问题:

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

仲孙奇
2023-03-14

我正在使用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个答案

洪黎昕
2023-03-14

展开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内容大小:

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

 类似资料:
  • 在中有一个新控件,名为。下面是它的图片。 它的描述是 为外部故事板中的视图控制器提供占位符。连接到此占位符的Segue将在运行时实例化引用的视图控制器。 所以问题是 在什么情况下我们应该使用这个 这是否用于通过segue连接两个故事板的视图控制器 这种方法是否用于以编程方式替代另一个故事板的VC 它能在旧的iOS版本(iOS 9之前)上工作吗

  • 问题内容: 我正在运行Xcode 5并为iOS 7构建。当我尝试构建该项目进行归档时,出现此错误。我在本地计算机和jenkins构建服务器上获得它。我已经遍历了情节提要,但找不到任何导致此错误的原因。它可以在模拟器和设备上很好地构建。我什至不知道是什么runtime.nib,尽管addEditHCPViewController.nib是对情节提要内部的视图控制器之一的引用。有任何想法吗? 问题答案

  • 问题内容: 我在Xcode 6中创建插座集合时遇到麻烦。Xcode6中的插座集合现在可以用作常规IBOutlets,并且您使用相同的@IBOutlet属性来声明插座集合,同时确保为该类型指定一个数组。我已经在我的视图控制器的快速文件中做到了这一点,即 在Xcode 5中,当一个控件使用助手编辑器从情节提要中的元素拖到情节提要中时,将为它们提供一个用于创建出口或出口集合的选项。这似乎在Xcode 6

  • 我是Xcode的新手,在使用Interface Builder时遇到IDE崩溃的问题。这是Xcode4.5。 它正常工作了很长时间,足以让我在故事板中添加十几个按钮--但当我试图调整其中任何一个按钮的大小时,它就会崩溃并退出。如果我动一个按钮,它就会崩溃。如果我添加一个像标签这样的新对象,它有时会崩溃,但不总是。 如果我不尝试编辑故事板,项目在模拟器上构建和运行不会有任何问题。 我已经贴了什么看起

  • 我使用的是Xcode 4.5和iOS 6。 我正在构建一个使用故事板的通用应用程序。我有一个视图控制器,它在导航栏中有一个按钮。当点击按钮时,我正在使用一个segue来显示另一个视图控制器作为模式。模态视图控制器在其导航栏中有一个“取消”和一个“保存”按钮。在情节提要中,模式按钮项链接到新退出操作上的操作,该操作应展开到父视图控制器,取消模式,并调用操作处理程序。 这在iPhone上运行良好,但我

  • 问题内容: 我安装了Xcode 6.3,其中包括对Swift 1.2的支持。出现了大量错误消息,其中大多数是转换问题。 我导航到情节提要,并且在不崩溃的情况下无法返回其他任何内容。我已经强制退出,重新启动甚至重新安装了,但仍然无法离开文件。 我尝试了这里描述的建议以代码形式打开情节提要,进行一些更改,还原这些更改,保存并重试,但还是没有运气。 我的代码中有什么破坏Xcode吗?还有其他人遇到这个吗