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

Triggering push segue from long press on map view

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

Story Board view

问题出现在从地图视图控制器到添加标签视图控制器的高亮显示中。我试图设置这样当用户在地图视图上长按超过 1 秒时,它会使用 prepareForSegue 发送纬度和经度手动切换到添加标签视图控制器。

但是,当我在模拟器上执行长按时,它似乎出现了两次。顶部屏幕的导航按钮简单地显示 "Back",这将导致添加标签屏幕的副本,其中导航按钮正确地返回到地图视图控制器。

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

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

    uilpgr.minimumPressDuration = 1

    map.addGestureRecognizer(uilpgr)

长按触发的 "action" 代码:

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 处设置断点,它似乎在触发 segues 之前执行了 "action" 代码两次,然后发生背靠背。

任何人都可以解释为什么会发生这种情况以及如何解决它吗? (我也乐于接受更好的方法来完成命名自定义掉落点任务的建议)。谢谢!

试试这样改变你的动作方式

 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)
    }
}

希望对您有所帮助。