【问题标题】:Create an array for each collection view cell为每个集合视图单元格创建一个数组
【发布时间】:2016-09-06 13:02:55
【问题描述】:

我正在尝试使用自定义集合视图单元格创建集合视图。

我想跟踪每个单元格被点击的次数并存储在一个数组中。所以,我的自定义单元格有一个标签、IBAction 和一个数组。

我可以通过将 1 附加到 IBAction 内的数组并打印出计数来做到这一点。

但是,我想在自定义单元格视图类之外访问这些数据。我想要一个特定于每个单元格的数组,即名称

    self.titleLabel.text!

当然,我不能使用变量作为数组的名称! (我希望我能)

在这种情况下如何存储数据?

我需要在哪里以及如何定义数组以轻松存储和处理数据?

【问题讨论】:

  • 1) 为什么不能使用变量名作为数组名称?你绝对可以。您可以将属性与其他任何东西一样用于数组。 2)您的自定义单元子类不应持有该数组。单元格应该负责显示数据,您的模型或视图控制器应该负责像您的数组一样保存数据。让您的 viewController 处理点击次数并在您的 didSelect 委托方法中增加它。
  • 感谢您的洞察力。在基于 MVC 模型的自定义单元之外保存数组当然是有意义的。但是,我不知道该怎么做。 1) 我尝试使用 > self.titleLabel.text 在自定义单元格中创建一个数组!但是 swift 会抛出错误 2)另外,当有多个单元格时,我们如何访问自定义单元格之外的标签。我不能使用“self”关键字如果你能提供一些代码会很有帮助。
  • 要回答这个问题,您需要发布您尝试将其添加到自定义单元格的代码。然后我们可以调试那个 Swift 代码。有可能,你的 Swift 代码可能有点问题
  • KDRearrangeableCollectionViewCell.swift 中添加的代码@IBAction func buttonPressed(sender: UIButton) { print("This is \(self.titleLabel.text!) button!!! It works!!!!") buttonCount.append(1) print("\(self.titleLabel.text!) has been recorded \(buttonCount.count) times") dump(tapCounts) } var buttonCount = [Int]() func handleTap(sender: UITapGestureRecognizer) { print("Button \(self.titleLabel.text!) has been tapped!!!") }

标签: ios arrays swift uicollectionview uicollectionviewcell


【解决方案1】:

您可以在您的UIViewController 中声明拥有点击计数的Dictionary

var tapCounts = [NSIndexPath: Int]()
let collectionView = UICollectionView()

func tapAction(sender: UICollectionViewCell) {
    if let indexPath = collectionView.indexPathForCell(sender) {
        tapCounts[indexPath] = (tapCounts[indexPath] ?? 0) + 1
    }
}

【讨论】:

  • 感谢您分享我尝试将其包含在我的项目中的代码,并进行了修改 > UICollectionViewCell 与我的自定义类 > KDRearrangeableCollectionViewCell" 但是当我使用 > dump(tapCounts) 我得到“- 0 key/值对”不确定是什么问题...请帮助
  • @EcoApps 看起来您在调用 tapAction 时遇到问题;您是否通过按钮/手势将target - action 设置为此方法?另外,你最好分享一些代码来帮助我们帮助你
  • 还在 KDRearrangeableCollectionViewCell.swift 中添加了 var buttonTapped: UITapGestureRecognizer? 我在 ViewController.swift 中添加并使用了代码 @IBAction func button(sender: UIButton) { print("Hello World!") dump(tapCounts) func tapAction(KDRearrangeableCollectionViewCell, buttonTapped) }
  • 还修改了你的代码var tapCounts = [NSIndexPath: Int]() let collectionView = UICollectionView() func tapAction(sender: KDRearrangeableCollectionViewCell, gesture: UITapGestureRecognizer) { print("Hello tapAction!!!") if((sender.buttonTapped) != nil){ if let indexPath = collectionView.indexPathForCell(sender) { tapCounts[indexPath] = (tapCounts[indexPath] ?? 0) + 1 print("\(sender.titleLabel.text)") } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多