将 segue 添加到动态创建的单元格

Posted

技术标签:

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

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

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

问题:

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

Interface Builder 设置截图:

【问题讨论】:

【参考方案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 部分中的方法。

以上是关于将 segue 添加到动态创建的单元格的主要内容,如果未能解决你的问题,请参考以下文章

从静态单元到动态 TableViewController

在动态 UITableView 单元格的索引 0 处创建静态“添加”单元格

将文本字段动态添加到表格视图单元格并水平滚动

动态地将单元格添加到分组的 uitableview 并以编程方式适应滚动

DOM动态添加删除表格内容所使用到的常用方法,) . 给表格行创建删除单元格的方法. 事件概念和事件监听

DOM动态添加删除表格内容所使用到的常用方法,) . 给表格行创建删除单元格的方法. 事件概念和事件监听