您好我访问存储在CollectionViewCell内部的String值时遇到问题,以便在我的CollectionViewController中使用segue。
我的CollectionViewController包含任意数量的单元格,这些单元格具有Button,Label和ID。当用户按下按钮时,我想要转到新的ViewController并将ID作为参数传递。
我意识到你无法从CollectionViewCell中脱离出来,所以我需要找到一种方法来获取在我的CollectionViewController中按下按钮的单元格的访问ID。
以下是我创建单元格的方法:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collection_cell", for: indexPath) as! GroupCollectionViewCell
if(GroupViewController.GI.getIds().count>1)
{
cell.groupNameLabel.text! = GroupViewController.GN.getNames()[indexPath.row].removeCharacters(from: "\"")
cell.groupId = GroupViewController.GI.getIds()[indexPath.row]
cell.groupName = GroupViewController.GN.getNames()[indexPath.row].removeCharacters(from: "\"")
}
return cell
}
值得一提的是,我尝试了下载didSelectItem atIndexPath路由并遇到了一些问题。也就是说,当我按下按钮时,根本不会调用该功能。 以下是我宣布该功能的方法。按下按钮从不打印出“测试”。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("test")
}
我将添加我的CollectionViewControllerCell的代码,以防有:
class GroupCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var cellButton: UIButton!
@IBOutlet weak var groupButton: UIButton!
@IBOutlet weak var groupNameLabel: UILabel!
var groupId: String = ""
var groupName: String = ""
@IBAction func buttonPressed(_ sender: UIButton) {
print(self.groupId)
print(self.groupName)
}
}
因此,如果任何人有一个很好的方法来实现我的目标,我会非常感激。 This is a photo of my CollectionViewController with 6 items
编辑: 我已经意识到单击我的CollectionViewControllerCell中的标签会调用我的didSelectItemAtPath函数,但不会调用按钮。有没有办法让它们都这样做?
答案 0 :(得分:0)
您没有提到它,但我假设您在GroupViewController中实现了委托和数据源。
在这种情况下,解决问题的最简单方法是为您的单元格添加一个闭包:
final class GroupCollectionViewCell: UICollectionViewCell {
@IBOutlet private weak var cellButton: UIButton!
@IBOutlet private weak var groupButton: UIButton!
@IBOutlet private weak var groupNameLabel: UILabel!
var groupId: String = ""
var groupName: String = "" {
didSet {
groupNameLabel.text = groupName
}
}
var cellSelected: (_ groupId: String, _ groupName: String) -> Void = { _, _ in }
@IBAction func buttonPressed(_ sender: UIButton) {
cellSelected(groupId, groupName)
}
}
创建单元格时,必须设置闭包:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collection_cell", for: indexPath) as! GroupCollectionViewCell
if GI.getIds().count > 1 {
cell.groupId = GI.getIds()[indexPath.row]
cell.groupName = GN.getNames()[indexPath.row].removeCharacters(from: "\"")
cell.cellSelected = { [weak self] groupId, groupName in
self?.mySequeImplementation(toId: groupId, name: groupName) // contains you implementation of the transition
}
}
return cell
}
请注意,您必须添加[弱自我]!否则你会得到一个保留循环(内存泄漏)。
您不需要didSelectItemAt方法实现,甚至可以停用单元格选择。