【问题标题】:Add segue to dynamically created cells将 segue 添加到动态创建的单元格
【发布时间】:2015-05-29 21:29:27
【问题描述】:

我正在动态创建 9 个单元格,这些单元格将适合 UICollectionView。点击时,每个按钮将加载不同的视图控制器。由于单元格是由数组中的数据生成的,因此我无法在 Interface Builder 中设置 segueidentifier

我一直在使用这种方法:self.navigationController?.pushViewController(vc, animated: true),但我相信这不是过渡到不同视图控制器的最新方法。

问题:

  • 我是否应该以编程方式为每个动态单元格创建一个转场,如果是这样: 怎么样?
  • 我是否应该将界面构建器中的一个按钮连接到虚拟视图控制器并在 segue 开始之前切换目标视图控制器,如果是这样:我将如何切换目标视图控制器?

Interface Builder 设置截图:

【问题讨论】:

    标签: ios uitableview swift uicollectionview segue


    【解决方案1】:

    您应该在 Interface Builder 中设置 segue,但不是从按钮,而是从视图控制器,并设置适当的标识符。 使用这个方法开始一个segue:

    - performSegueWithIdentifier:sender:
    

    【讨论】:

    • 但是如果按钮是动态生成的(它们不会出现在 Interface Builder 中),我应该如何在 Interface Builder 中设置 segue?
    • 您可以使用 segue 标识符设置 UIButton.Tag。 [self performSegueWithIdentifier:(sender as UIButton).Tag sender:self];
    • 从 ViewController 而非按钮中按住 Ctrl 并拖放。
    • 到你想要转场的 ViewController。 i.imgur.com/eR65DfZ.png
    • 您将您的 ViewController 连接到它们中的每一个。给每个 segue 一个不同的标识符。然后在 performSegueWithIdentifier:sender: 中指定要使用的标识符(例如)在 UIButton 的 Tag 属性中。
    【解决方案2】:

    我不会在这种情况下使用 segues。我会给每个不同的视图控制器一个故事板 ID,然后以这种方式加载它们。然后您可以通过该 ID 加载特定的视图控制器并以这种方式进行转换。

    我正在对您的代码做出一些假设,以便展示一个示例。我将假设每个单元格中都有一个按钮,这就是被按下以触发 segue 的按钮。我还将假设每个单元格的按钮都将初始视图控制器作为目标,并具有如下代码中的方法声明。

    func buttonPressed(cell: UICollectionViewCell) {
        let viewController = self.storyboard!.instantiateViewControllerWithIdentifier("storyboardID") as! UIViewController
        self.navigationController!.showViewController(viewController, sender: self)
    }
    

    【讨论】:

    • 在这种方法中,如何控制调用此方法时执行的转换类型?
    • 我的意思是,假设我想使用 showViewController 方法显示“翻转”转场而不是标准的“推”转场。我将如何指定执行的 segue? (因为单元格是动态创建的,因此 Interface Builder 中没有可配置的选项?
    • 您可以使用UIViewController Presenting Content docs中列出的不同方法
    • 假设我想调用以下方法来配置segue:performSegueWithIdentifier,我应该使用什么作为“标识符”?
    • 如果您在代码中实例化视图控制器,您将不会使用performSegueWithIdentifier。坚持我在最后一条评论中链接的文档中的方法。具体来说,Presenting Content Over the View Controller 部分中的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多