在地图视图上长按触发推送 segue

Posted

技术标签:

【中文标题】在地图视图上长按触发推送 segue【英文标题】:Triggering push segue from long press on map view 【发布时间】:2016-06-14 04:36:15 【问题描述】:

我的应用应该允许用户在地图视图上查看地点列表(作为注释)并添加他们自己的自定义地点。它使用三个带有导航控制器的视图控制器——一个用于位置列表的表格视图,一个带有地图视图的基本视图控制器,以及一个带有用于为其自定义引脚添加名称的文本字段的基本视图控制器。故事板:

Story Board view

从地图视图控制器到添加标签视图控制器的突出显示转场会出现问题。我已尝试进行设置,以便当用户在地图视图上长按超过 1 秒时,它会使用 prepareForSegue 发送纬度和经度手动转到添加标签视图控制器。

但是,当我在模拟器上执行长按时,它似乎连续两次。顶部屏幕的导航按钮简单地说“返回”,这会导致添加标签屏幕的副本,其中导航按钮正确地返回地图视图控制器。

viewDidLoad 中长按手势识别器的代码:

    var uilpgr = UILongPressGestureRecognizer(target: self, action:     "action:")

    uilpgr.minimumPressDuration = 1

    map.addGestureRecognizer(uilpgr)

长按触发的“动作”代码:

func action(gestureRecognizer:UIGestureRecognizer) 

    touchPoint = gestureRecognizer.locationInView(self.map)

    newCoordinate = map.convertPoint(touchPoint!, toCoordinateFromView: self.map)
 //3   
    self.performSegueWithIdentifier("NamePlace", sender: self)
 //4
    

准备segue的代码(发送坐标:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "NamePlace" 

        let lat = newCoordinate!.latitude
        let long = newCoordinate!.longitude

        let viewController = segue.destinationViewController as! AddLabelViewController

        viewController.latitude = lat
        viewController.longitude = long

    

我尝试在“action”代码中(以及在 prepareForSegue 方法期间)在 3 和 4 处设置断点,似乎它在触发 segue 之前执行了两次“action”代码,然后又发生了背靠背.

谁能解释为什么会发生这种情况以及如何解决它? (我也愿意提出更好的方法来完成命名自定义点的任务)。谢谢!

【问题讨论】:

【参考方案1】:

试着像这样改变你的动作方法

 func action(gestureRecognizer:UIGestureRecognizer) 

    if (gestureRecognize.state == .Began) 
        touchPoint = gestureRecognizer.locationInView(self.map)
        newCoordinate = map.convertPoint(touchPoint!, toCoordinateFromView: self.map)
        self.performSegueWithIdentifier("NamePlace", sender: self)
    

希望这会对你有所帮助。

【讨论】:

以上是关于在地图视图上长按触发推送 segue的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITableViewRow 需要长按才能触发 segue?

如何一次推送一些带有 segue 的视图控制器

如何在推送segue后让源视图控制器不会消失?

从 Unwind segue 触发时,Push segue 不起作用

Swift 全屏导航推送 Segue

在列表视图上长按事件后创建菜单