我的应用程序应该允许用户在地图视图上查看地点列表(作为注释)并添加他们自己的自定义地点。它使用三个带有导航控制器的视图控制器 - 一个用于地点列表的tableview,一个带有地图mapview的基本视图控制器,以及一个带有文本字段的基本视图控制器,用于为其自定义引脚添加名称。故事板:
从地图视图控制器到添加标签视图控制器的突出显示的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之前两次编码,然后发生在背后。
任何人都可以解释为什么会发生这种情况以及如何解决这个问题? (我也对更好地完成命名自定义点的任务的建议持开放态度)。谢谢!
答案 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)
}
}
希望这会对你有所帮助。