2016-06-14 14 views
1

Meine App ermöglicht Benutzern, eine Liste von Orten (als Anmerkungen) in einer Kartenansicht anzuzeigen und ihre eigenen benutzerdefinierten Orte hinzuzufügen. Es verwendet drei View-Controller mit einem Navigations-Controller - eine Tabellenansicht für die Liste der Orte, einen grundlegenden View-Controller mit einem Mapview für die Map und einen grundlegenden View-Controller mit einem Textfeld zum Hinzufügen eines Namens für den benutzerdefinierten Pin. Storyboard:Auslösen des Push-Segments durch langes Drücken der Kartenansicht

Story Board view

Das Problem tritt mit dem markierten Übergang von den Kartenansicht Controller an den Add Label-View-Controller. Ich habe versucht, so einzurichten, dass, wenn ein Benutzer länger als 1 Sekunde auf die Kartenansicht drückt, er manuell zum Ansichts-Controller hinzufügen navigiert, indem er prepareForSegue Sende-Breiten- und Längengrad verwendet.

Allerdings, wenn ich den langen Druck auf den Simulator ausführen, scheint es zweimal zu segue. Auf der Navigationsschaltfläche des oberen Bildschirms wird einfach "Zurück" angezeigt. Dies führt zu einem Duplikat des Bildschirms "Etikett hinzufügen" mit einer Navigationsschaltfläche, die korrekt zum Kartenansicht-Controller zurückführt.

-Code für lange drücken Gestenerkenner von viewDidLoad:

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

    uilpgr.minimumPressDuration = 1 

    map.addGestureRecognizer(uilpgr) 

-Code für "Aktion" durch langes Drücken ausgelöst:

func action(gestureRecognizer:UIGestureRecognizer) { 

    touchPoint = gestureRecognizer.locationInView(self.map) 

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

-Code für segue Herstellen (senden Koordinaten:

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 

    } 
} 

Ich habe versucht, Haltepunkte bei 3 und 4 in der "Aktion" Code (sowie während der Pre pareForSegue-Methode) und es schien, als ob sie den "Action" -Code zweimal ausgeführt hätte, bevor sie die Segmente ausgelöst hätten, was dann Rücken an Rücken passiert wäre.

Kann jemand erklären, warum das passiert und wie man es beheben kann? (Ich bin auch offen für Vorschläge von besseren Möglichkeiten, um die Aufgabe der Benennung von benutzerdefinierten Punkten zu lösen). Vielen Dank!

Antwort

0

Versuchen Sie, Ihre Aktion-Methode wie diese

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

Hoffnung, dies zu ändern Ihnen helfen.

+0

Das hat funktioniert. Vielen Dank! – MontanaCoder23