2017-02-16 4 views
0

hier meine Situation ist, erhalten‚Disable‘ Segue für Post mit einem bedingten Wert iOS/Swift

auf meiner app, ich habe eine Liste der Post sein Anzeige durch eine tablew Ansicht. auf Klick, es über diesen Übergang zu einer postdetail Ansicht bringen:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    selectedIndexPath = indexPath.row 
    self.performSegue(withIdentifier: "push", sender: self) 
    self.feedTableView.reloadData() 
} 

Mit Firebase, hat einige meiner Post eine Bedingung published mit Booleschen Wert (true/false)

ich möchte irgendwie‘, wenn Der Wert ist auf "false" gesetzt, um den Übergang zu deaktivieren. Da einige Beiträge einen "COMING SOON" -Titel haben, sollte beim Klicken auf diese Beiträge nichts passieren.

Wissen Sie, wie ist das möglich? Wird schön sein!

Vielen Dank!

EDIT -

Dass die Struktur meiner DB, wo Sie den veröffentlichten Zustand sehen enter image description here

+0

Warum Sie nicht so etwas wie if (post.content.contains verwenden ('ComingSoon') {// performSegue}? –

+0

hm, die Idee ist es nicht zu haben das segue funktioniert, wie können Sie es deaktivieren? Danke :) :) – tibewww

Antwort

0

Try this:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     guard posts[indexPath.row].title != "COMING SOON" else { 
      return 
     } 
     self.performSegue(withIdentifier: "push", sender: self) 
} 
+0

Beautifull! Vielen Dank, es funktioniert wie ein Zauber! – tibewww

+0

hmm ich habe es gerade gemerkt, es geht nicht um die guten daten für die anderen posts !!! Irgendeine Idee warum :(? – tibewww

0

Ich glaube nicht, können Sie „disable“ ein Übergang, aber man kann es verhindern, durchgeführt werden Verwenden einer bedingten if-Anweisung in Ihrer Delegatenmethode didSelectRowAtIndexPath.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    selectedIndexPath = indexPath.row 
    // get post info 
    let post = myArrayOfPosts[selectedIndexPath] 
    // check if post is COMING SOON 
    if post.title != "COMING SOON"{ 
     // if not, trigger the segue    
     self.performSegue(withIdentifier: "push", sender: self) 
    } 
    self.feedTableView.reloadData() 
} 

Ich würde empfehlen, das „coming soon“ zu speichern String-Wert in einer Konstante in Ihrer Klasse, oder vielleicht in einem Enum, wenn Sie andere Titel haben, für die Sie ein anderes Verhalten mögen.

EDIT: Ich habe die if-Anweisung, die ich falsch an erster Stelle geschrieben hat, behoben. Ich kann noch nicht auf Beiträge kommentieren (mangelnde Reputation), so hoffentlich Sie diese bearbeiten sehen :)