触发滑动手势取消 IBAction 的 Segue

Posted

技术标签:

【中文标题】触发滑动手势取消 IBAction 的 Segue【英文标题】:Triggered Segue of Swipe Gesture Canceling IBAction 【发布时间】:2015-08-07 16:52:15 【问题描述】:

我在视图控制器中有一个滑动手势,可以正常工作并向输出报告。像这样简单的东西:

 @IBAction func leftSwipe(sender: UISwipeGestureRecognizer) 
    println("ok") 

但随后我采用了相同的手势识别器并为其附加了一个 segue,这将导致它在检测到滑动时以模态方式切换视图控制器。我通过简单的控制单击在情节提要中完成了所有这些操作,将手势识别器拖到我想要更改的视图控制器,然后选择一个 segue 动画选项。它按预期工作,当我将视图控制器更改为另一个时,但是...... IBAction 完全停止工作,我什至使用了一个断点,它永远不会在那里中断。触发的 segues 是否会正常取消其他已发送的操作?我总是可以添加另一个手势识别器,但这种行为正常吗?

小更新: 添加新的手势识别器有效,并且可以使用 IBAction 进行识别,但现在之前的手势不起作用,视图控制器也没有改变。

解决方案: 感谢 Firas 为我指明了正确的方向,我找到了 apple here 解释的方法 prepareForSegue 我在视图控制器中实现了发送 segue 的方法,如下所示:

 override func  prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "yourSegueID" 
        println("segue happened, so the gesture did too!")
    

也许将 segue 与这样的手势相关联可能会出现问题,但对于我的实现,我真的看不到任何可能发生的事情。

【问题讨论】:

【参考方案1】:

您可以做的是从viewController 而不是gestureRecognizer 中获取segue,并为该segue 提供一个标识符,比如说segueIdentifier,然后在您的操作调用self.performeSegueWithIdentifier... 或执行其他操作。

当您直接从视图或手势识别器创建转场时,该视图/手势识别器上的操作将不会执行

【讨论】:

非常感谢您使用 segue 标识符回答并指出我正确的方向。我给我的 segue 一个 id 并使用 prepareForSegue 方法来检测一个 segue,然后在方法中检查该 segue 是否是具有我指定的 id 的 segue。工作得很好,我会更新我的问题,我会在苹果开发者资源中链接。 segue 取消触摸是否正常?因为由于某种原因,即使手势识别器的“取消视图中的触摸”设置为 no,但 didSelecRowAtIndexPath 给我的 indexPath.row 为零

以上是关于触发滑动手势取消 IBAction 的 Segue的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 滑动手势与右滑返回冲突

UIImage IBAction Segue? [关闭]

iOS - 自定义 segue 内存泄漏

滑动手势取消编辑模式后 UITableViewCell 刷新不良

使用向后滑动手势以交互方式取消选择选定单元格

javaScript事件事件类型之触摸与手势事件