触发滑动手势取消 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的主要内容,如果未能解决你的问题,请参考以下文章