在地图视图中从长按触发推送segue

时间:2016-06-14 04:36:16

标签: ios swift mkmapview segue long-press

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

Story Board view

从地图视图控制器到添加标签视图控制器的突出显示的segue出现问题。我试图进行设置,以便当用户长按地图视图超过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

    }
}

我尝试在"动作"中设置断点3和4;代码(以及在prepareForSegue方法期间),似乎它执行了" action"在触发segue之前两次编码,然后发生在背后。

任何人都可以解释为什么会发生这种情况以及如何解决这个问题? (我也对更好地完成命名自定义点的任务的建议持开放态度)。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试像这样改变你的行动方法

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

希望这会对你有所帮助。