2016-04-12 9 views
0

Ich arbeite an einer "Trading" -Anwendung, wo ich eine statische Anzahl von Zellen haben möchte.Anzeigen von zwei verschiedenen Zellen in einer Sammlungsansicht - Swift 2.0 iOS

Nach dem Laden werden die Benutzer 5 Zellen sehen, von denen jede ein Etikett mit der Bezeichnung "Add" anzeigt.

Wenn ein "Player" hinzugefügt wird, zeigt diese Zelle die Player-Informationen an, die anderen 4 Zellen zeigen immer noch die "Add" -Etikette an. Ein weiterer ist hinzugefügt, 2 Zellen haben Spielerinformationen, 3 haben die "Add"

Ich habe eine Hölle Zeit mit diesem. Kann mir jemand in die richtige Richtung zeigen? Ich habe benutzerdefinierte Etiketten Setup, ich denke, meine Logik kann nur aus, wie dies richtig ausgeführt wird.

+0

können zeigen Ihnen, was Sie versucht haben? Mit welchem ​​Teil hast du gerade Schwierigkeiten? – Paulw11

Antwort

4

Sie benötigen die UICollectionViewDelegate und UICollectionViewDataSource Protokolle in Ihrem Viewcontroller zu Unterklasse, dann müssen Sie Funktionen der numberOfItemsInSection und cellForItemAtIndexPath implementieren. Zusätzlich zu, dass Sie benötigen zwei Arten von Zellen in Ihrem Storyboard erstellen und Unterklasse sie im Code folgenden nehme ich an, dass Sie AddedPlayerCell und DefaultCell Ihre Zellen nennen, wird angenommen, i, dass jede Zelle ein Label genannt hat labelText auch.

let players = ["Player1","Player2"] //players added till now 
let numberOfCells = 5 

//Here you set the number of cell in your collectionView  
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
      return max(players.count,numberOfCells); 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
      if((indexPath.row + 1) < self.players.count){ //If index of cell is less than the number of players then display the player 

        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("yourIdentifierForAddedPlayerCell", forIndexPath: indexPath) as! AddedPlayerCell 
        cell.labelText.text = self.players[indexPath.row] //Display player 
        return cell; 

      }else{//Else display DefaultCell 
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("yourIdentifierForDefaultCell", forIndexPath: indexPath) as! DefaultCell 
        cell.labelText.text = "Add" 
        return cell; 
      } 
} 
+0

Schön, danke! – excessive34

0

Um zwei verschiedene Zelltypen zu verwalten, können Sie:

  1. erstellen 2 Prototyp-Zellen für Ihre Sammlung Ansicht. Geben Sie einen die Kennung "Add" und die andere "Info". Der Zellenprototyp "Add" enthält das Label "Add", und der Zellenprototyp "Info" enthält Felder zum Anzeigen der Player-Informationen.
  2. Fügen Sie Ihrer Klasse eine Array-Eigenschaft hinzu, die verfolgt, welche Zellen "Add" anzeigen. var showingAdd = [true, true, true, true, true]
  3. In cellForItemAtIndexPath, überprüfen die showingAdd Array zu bestimmen, welche Identifizierer zu verwenden, wenn Warteschlangenauflösungs die Zelle:

    let identifier = showingAdd[indexPath.row] ? "Add" : "Info" 
    let cell = dequeueReusableCellWithIdentifer(identifier...) 
    
    if !showingAdd[indexPath.row] { 
        // configure the cell with the proper player info 
        // retrieve info from info property array item created in 
        // step 4. 
        let player = playerInfo[indexPath.row] 
        cell.playerName = player.name 
        ... 
    } 
    
  4. Wenn eine Zelle in didSelectItemAtIndexPath ausgewählt ist, prüfen, ob es hinzufügen zeigt und dann verarbeiten entsprechend:

    if showingAdd[indexPath.row] { 
        // query user to get player info 
        // store the info in a property array indexed by `indexPath.row` 
        playerInfo[indexPath.row] = PlayerInfo(name: name, ...) 
    
        showingAdd[indexPath.row] = false 
    
        // trigger a reload for this item 
        collectionView.reloadItemsAtIndexPaths([indexPath]) 
    } 
    
+0

Dies ist eine super interessante Art, dies zu tun, ich finde es faszinierend. – excessive34

Verwandte Themen