将数据从集合视图单元格移动到新的集合视图单元格

Posted

技术标签:

【中文标题】将数据从集合视图单元格移动到新的集合视图单元格【英文标题】:Moving data from a collection view cell to a new collection view cell 【发布时间】:2020-06-09 02:10:10 【问题描述】:

我正在尝试将组织的名称传递给新的 viewController。问题是,当我将集合视图单元格中的值传递给另一个视图控制器中的新标签时,会显示多个重复相同信息的集合视图单元格。我将如何更改这一点,以便在选择第一个 collectionView 中的一个单元格后,只有该信息会填充另一个 collectionView 单元格?

这是第一个 viewController 的代码。

import UIKit

class FirstViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource 

@IBOutlet weak var secondCollectionView: UICollectionView!

var valueToPass = Int()

var arrayOfOrganizations = ["one", "two", "three", "four"]

override func viewDidLoad() 
    super.viewDidLoad()



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return arrayOfOrganizations.count
    

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let secondCell = secondCollectionView.dequeueReusableCell(withReuseIdentifier: "secondCell", for: indexPath) as! SecondCollectionViewCell
    secondCell.nameTextLabel.text = arrayOfOrganizations[indexPath.item]
    return secondCell
    

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    valueToPass = indexPath.item
    performSegue(withIdentifier: "MoveCollectionViewCell", sender: self)
    arrayOfOrganizations.remove(at: indexPath.item)
    self.secondCollectionView.deleteItems(at: [indexPath])
    secondCollectionView.reloadData()


override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if (segue.identifier == "MoveCollectionViewCell") 
        let destination = segue.destination as! MessagesViewController
        destination.valueToPass = arrayOfOrganizations[valueToPass]
    





class SecondCollectionViewCell: UICollectionViewCell 
@IBOutlet weak var nameTextLabel: UILabel!
@IBOutlet weak var descriptionTextLabel: UILabel!

这是我的第二个 viewController 的代码。

import UIKit

class MessagesViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource 

@IBOutlet weak var messagesCollectionView: UICollectionView!

var valueToPass = ""

override func viewDidLoad() 
    super.viewDidLoad()



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return valueToPass.count


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "messagesViewCell", for: indexPath) as! MessagesViewCell
    cell.layer.borderWidth = 3
    cell.layer.cornerRadius = 12
    if (valueToPass == "one") 
        cell.textLabel.text = "one"
    
    if (valueToPass == "two") 
        cell.textLabel.text = "two"
    
    if (valueToPass == "three") 
        cell.textLabel.text = "three"
    
    if (valueToPass == "four") 
        cell.textLabel.text = "four"
    
    return cell




class MessagesViewCell: UICollectionViewCell 

@IBOutlet weak var textLabel: UILabel!


【问题讨论】:

【参考方案1】:

您的numberOfItemsInSection 正在返回字符串 valueToPass 的大小(字符数),这是您想要的吗?因为如果你只有一个值,那么该函数的返回值应该是 1。

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return valueToPass.count // Number of character in valueToPass

【讨论】:

【参考方案2】:

你的 numberOfItemsInSection collectionView 方法返回 valueToPass.count 把它改成 1。

【讨论】:

以上是关于将数据从集合视图单元格移动到新的集合视图单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何将表格视图单元格从一个表格视图移动到新的表格视图

将数据从集合视图单元格内的表视图单元格传输到另一个集合视图单元格 [带图片!]

将集合视图中的单元格移动到另一部分的最后一个单元格之外不起作用

RxSwift 不将数据绑定到自定义集合视图单元格

从 UITest 中选择集合视图中的第一个单元格

集合视图第一个单元格大小问题