将数据从集合视图单元格移动到新的集合视图单元格
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。
【讨论】:
以上是关于将数据从集合视图单元格移动到新的集合视图单元格的主要内容,如果未能解决你的问题,请参考以下文章
将数据从集合视图单元格内的表视图单元格传输到另一个集合视图单元格 [带图片!]