2016-04-18 11 views
1

Ich habe diesen Code, um die Entfernung mit Beacons zu aktualisieren.stop performseguewithidentifier einmal ausgeführt

func updateDistance(distance: CLProximity) { 
    UIView.animateWithDuration(0.8) { 
     switch distance { 
     case .Unknown: 
      print("unknown") 
     case .Far: 
      print("far") 
     case .Near: 
      print("near") 
     case .Immediate: 
      print("Immediate") 
      self.performSegueWithIdentifier("beaconSegue", sender: self) 
     } 
    } 
} 

Ich möchte nur fragen, ob, wie die self.performSegueWithIdentifier Funktion zu stoppen, wenn seine bereits ausgeführt.

+0

Sie sollten self.performSegueWithIdentifier nicht stoppen. Ruf es nur an, wenn du musst. –

+0

Ich verstehe jedoch in diesem Beispiel, wenn der Beacon ständig "Immediate" Position ausgibt, wird es den Übergang durchführen. Gibt es eine bessere Möglichkeit, einen Zwischenfall zu machen? – Dze

+0

Ich verstehe nicht, was du meinst. Wenn Sie nicht möchten, dass self.performSegueWithIdentifier ausgeführt wird, rufen Sie es einfach nicht auf. –

Antwort

0

Stellen Sie einfach eine Flagge, wenn Sie zuerst die Segue ausführen. Wie folgt:

var seguePerformed = false 

func updateDistance(distance: CLProximity) { 
    UIView.animateWithDuration(0.8) { 
     switch distance { 
     case .Unknown: 
      print("unknown") 
     case .Far: 
      print("far") 
     case .Near: 
      print("near") 
     case .Immediate: 
      print("Immediate") 
      if !self.seguePerformed { 
       self.seguePerformed = true 
       self.performSegueWithIdentifier("beaconSegue", sender: self) 
      } 
     } 
    } 
} 
+0

Dieser hat genau richtig funktioniert. Wenn ich jedoch den Back-Button aus der Ansicht drücke und versuche, den Beacon erneut in die Nähe der App zu bringen, wird sofort gedruckt und der Überhang wird nicht mehr geöffnet. – Dze

+0

Fügen Sie einfach eine Methodendefinition von 'func viewDidAppear (_ animated: Bool)' hinzu und stellen Sie innerhalb der Methode 'seguePerformed = false' zurück – davidgyoung

+0

Vielen Dank, dass die Arbeit gemacht hat. Danke vielmals. Habe einen sehr schönen Tag. Jetzt kann ich mit dem Projekt weitermachen. – Dze

1

Wenn Sie die performSegueWithIdentifier verhindern möchten, können Sie wie folgt tun:

override func shouldPerformSegueWithIdentifier(identifier: String,sender: AnyObject?) -> Bool { 
    if ... { // Set the condition if you want it can be perform 
     return true 
    } else { 
     return false 
    } 
}