2016-06-14 25 views
1

我的應用程序應該允許用戶查看地圖視圖中的地點列表(作爲註釋)並添加他們自己的自定義地點。它使用三個視圖控制器和一個導航控制器 - 一個桌面視圖來顯示地點列表,一個基本視圖控制器和地圖視圖,以及一個基本視圖控制器和一個文本字段用於添加自定義引腳的名稱。故事板:從地圖視圖上的長按觸發推塞格

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 
    } 

代碼準備賽格瑞(發送座標:

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的斷點(以及在pre pareForSegue方法),似乎它在觸發segues之前執行了兩次「動作」代碼,然後發生。

任何人都可以解釋爲什麼發生這種情況,以及如何解決它? (我也願意提供更好的方法來完成命名點下降的任務)。謝謝!

回答

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

希望這將幫助您的操作方法。

+0

工作。謝謝! – MontanaCoder23