将 segue 添加到动态创建的单元格
Posted
技术标签:
【中文标题】将 segue 添加到动态创建的单元格【英文标题】:Add segue to dynamically created cells 【发布时间】:2015-05-29 21:29:27 【问题描述】:我正在动态创建 9 个单元格,这些单元格将适合 UICollectionView
。点击时,每个按钮将加载不同的视图控制器。由于单元格是由数组中的数据生成的,因此我无法在 Interface Builder 中设置 segue
和 identifier
。
我一直在使用这种方法: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 添加到动态创建的单元格的主要内容,如果未能解决你的问题,请参考以下文章
在动态 UITableView 单元格的索引 0 处创建静态“添加”单元格
动态地将单元格添加到分组的 uitableview 并以编程方式适应滚动