在集合视图中显示两个不同的单元格 – Swift 2.0 iOS
我正在一个“交易”应用程序,我想有一个静态数量的单元格。
加载时,用户将看到5个单元格,每个单元格显示一个标签,上面写着“添加”。
当添加“玩家”时,该单元显示玩家信息,其他4个单元仍显示“添加”标签。 另外还有2个单元格有玩家信息,3个有“添加”
我有一个这个地狱。 任何人都可以指出我的方向正确吗? 我有自定义标签设置,我想我的逻辑可能只是closures如何正确执行此操作。
您需要在您的viewController中inheritanceUICollectionViewDelegate和UICollectionViewDataSource协议,然后您需要实现numberOfItemsInSection和cellForItemAtIndexPath函数。 除此之外,您需要在故事板中创build两种types的单元格和子类,在下面的代码中,我将假设您调用了AddingPlayerCell和DefaultCell您的单元格,我会假设每个单元格都有一个名为labelText的标签。
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; } }
为了pipe理两种不同的细胞types,您可以:
- 为您的collections视图创build2个原型单元格。 给一个标识符
"Add"
和另一个"Info"
。"Add"
单元格原型将包含标签"Add"
,并且"Info"
单元格原型将包含显示球员信息的字段。 - 添加一个数组属性到你的类,跟踪哪些单元格显示“添加”。
var showingAdd = [true, true, true, true, true]
-
在
cellForItemAtIndexPath
,检查showingAdd
数组以确定在将该单元出列时使用哪个标识符: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 ... }
-
当在
didSelectItemAtIndexPath
select一个单元格时,检查它是否显示添加,然后相应地处理它: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]) }