如何在Swift中的collectionView中访问方法之外的单元格值?

时间:2018-05-19 03:27:12

标签: swift uicollectionview jsqmessagesviewcontroller

我正在使用带有JSQMessageCollectionViewCell的JSQMessage库。如何在方法cellForItem atIndexPath之外访问单元格的值。

这是方法

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = super.collectionView(collectionView, cellForItemAt: indexPath) as! JSQMessagesCollectionViewCell

    if Array_Messages[indexPath.item].senderId == senderId {
        cell.textView?.textColor = UIColor.white
        cell.cellBottomLabel.textInsets = UIEdgeInsetsMake(0, 0, 0, 35)
        let second = ClassMessages[indexPath.row].Time.doubleValue
        let time = Date(timeIntervalSince1970: second)
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"

        cell.cellBottomLabel.text = "\(String(describing: newMess.Status!)) \(dateFormatter.string(from: time))"  
    } 
    return cell
}

我尝试这样做,但得到了错误

@IBAction func btTrash(_ sender: Any) {
    let indexPath = IndexPath.init(row: 0, section: 0)
    let cell = collectionView.cellForItem(at: indexPath) as! JSQMessagesCollectionViewCell
    print("aaa \(cell?.cellBottomLabel.text)")
}

错误Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional

我该如何解决这个问题?谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

我建议你在storyBoard中添加这个checkBox,并通过将其设置为isHidden属性使其隐藏,并在控制器上将一个全局Bool设置为false。所以当你的bar按钮被cliked使这个变量为true并重新加载表。

并在cellForRowAtIndexPath中检查它是这样的。

var shouldShowCheckBox = false

func barButtonTaped(){
shouldShowCheckBox = !(shouldShowCheckBox)
}

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
      btnCheckBox.isHidden = shouldShowCheckBox        

    }

答案 1 :(得分:0)

您也可以访问类似的内容。

class RegistrationVc: UIViewController {

    var objCell = RegistrationCell()

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "RegistrationCell", for: indexPath) as! RegistrationCell
        objCell = cell
        return cell
    }
    @IBAction func btnContinue(_ sender: UIButton) {

            objCell.txtUserName.errorMessage = "please enter user name"
     }

答案 2 :(得分:0)

斯威夫特 4、斯威夫特 5

您可以使用 cellForItem 在 collectionView 委托之外访问您的单元格。在本例中,MerchantCell 位于第 4 行。

if let merchantCell = collectionView.cellForItem(at: IndexPath(row: 4, section: 0)) as? MerchantCell {
    merchantCell.refreshMerchant()
}