2016-07-11 17 views
0

Ich habe einen CollectionViewController, der benutzerdefinierte CollectionViewCells lädt. Die Elemente in der CollectionViewCell werden durch eine plist-Datei gefüllt:Wie geht man zu einem zweiten Tableview-Controller (von Plist), basierend auf der ersten Auswahl von collectionview?

plist1:

<array> 
    <dict> 
     <key>Title</key> 
     <string>Example Title</string> 
     <key>Description</key> 
     <string>Short description...</string> 
     <key>Time</key> 
     <string>Feb 6, 4:45</string> 
     <key>Background</key> 
     <string>Default</string> 
    </dict> 
    <dict> 
     <key>Title</key> 
     <string>Example Title 2</string> 
     <key>Description</key> 
     <string>Short description...</string> 
     <key>Time</key> 
     <string>Feb 6, 4:45</string> 
     <key>Background</key> 
     <string>Default2</string> 
    </dict> 
</array> 

Wenn ein Element in der Collection ausgewählt ich die Ansicht muß durch eine separate plist-Datei gefüllt zu einem neuen Tableviewcontroller gehen. Der TableViewController, der geladen wird, sollte davon abhängig sein, welches CollectionViewItem ausgewählt ist, was vom plist-Eintrag abhängt. Ich würde einen Weg bevorzugen, dies neben der Hardcoding zu tun, wenn IndexRow 1/2/etc ausgewählt ist.

plist2:

<dict> 
    <key>List1</key> 
    <array> 
     <string>Item1</string> 
     <string>Item2</string> 
     <string>Item3</string> 
    </array> 
    <key>List2</key> 
    <array> 
     <string>Item1</string> 
     <string>Item2</string> 
     <string>Item3</string> 
    </array> 
</dict> 

Grundsätzlich:

Collection -> CollectionViewCell1 (von plist1) -> TableView1 (von plist2)

Collection -> CollectionViewCell2 (von plist1) -> TableView2 (von plist2)

Kommentar, wenn mehr Klärung oder Details benötigt werden, da ich finde, dass dies in völliger Klarheit schwierig zu beschreiben ist.

+0

was die plist2 aussehen? zwei Liste von Array? – xmhafiz

+0

Ich habe gerade hinzugefügt, was plist2 derzeit im Hauptpost ist. – About7Deaths

Antwort

1

Ich denke, das durch Hinzufügen eines weiteren Schlüssel in plist1 getan werden kann, um die Liste zu spezifizieren, die für Tableviewcontroller

<array> 
<dict> 
    <key>Title</key> 
    <string>Example Title</string> 
    <key>Description</key> 
    <string>Short description...</string> 
    <key>Time</key> 
    <string>Feb 6, 4:45</string> 
    <key>Background</key> 
    <string>Default</string> 
    <key>ListName</key> 
    <string>List1</string> 
</dict> 
<dict> 
    <key>Title</key> 
    <string>Example Title 2</string> 
    <key>Description</key> 
    <string>Short description...</string> 
    <key>Time</key> 
    <string>Feb 6, 4:45</string> 
    <key>Background</key> 
    <string>Default2</string> 
    <key>ListName</key> 
    <string>List2</string> 
</dict> 

Fügen Sie eine Variable in Tableviewcontroller

var listName = "" 
override func viewDidLoad() { 
    // get list from plist2 

    // then reload table 
} 
in plist2 verwendet wird,

und Ihre PrepareForSegue-Funktion

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let indexPathRow = sender as! Int 
    let destination = segue.destinationViewController as! TableViewController 
    destination.listName = // get your list name from plist1 based on index path row 
} 

zuletzt, wenn die Zelle ausgewählt wird, führen Sie dann die Segue

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    // pass which indexpath row is selected 
    performSegueWithIdentifier("showTableView", sender: indexPath.row) 
} 
+0

In den meisten Fällen war der Code, den Sie zur Verfügung gestellt haben, sehr nützlich und ich habe es endlich zum Laufen gebracht. Vielen Dank! – About7Deaths