繁体   English   中英

将数据从集合视图单元格按钮传递到另一个视图控制器(Swift)

[英]Passing data from a collection view cell button to another view controller (Swift)

我在集合视图单元格中有一个按钮,当我按下按钮时,我想转到另一个视图控制器并将字符串传递给该视图控制器。 我唯一的问题是传递数据,我不知道如何检查从哪个单元格中单击了按钮。

extension UserViewController: UICollectionViewDataSource{

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView,
                        numberOfItemsInSection section: Int) -> Int {
        return self.posts.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PostCell", for: indexPath) as! UsersCollectionViewCell
        //cell.post = posts[indexPath.item]
        cell.User_Name.text = "\(self.posts[indexPath.item].firstname!) \(self.posts[indexPath.item].lastname!)"
        cell.Country.text = self.posts[indexPath.item].Country

        //user id is in the posts().uid

        return cell
    }

    //the segue is already made in the storyboard, i am trying to pass the user id in the function below

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "Testing1"{
            var view = segue.destination as! ViewTheAccount

            //user_ID = self.posts[indexPath.item].firstname

        }
    }
}

向您的单元格类中添加一个字符串变量,并在cellForRow中为其提供所需的strValue

// btn action in cell

 @IBAction func btnClicked(_ sender: Any)
 {
    /// access cell and get it's string var , self = cell

    /// here use delegate to push another view controller with self.strValue
 }

试试这个(我假设这里只允许单选,再加上我假设通过选择一个单元格来开始segue):

    if segue.identifier == "Testing1" {
        var view = segue.destination as! ViewTheAccount

        if let itemIndex = collectionView.indexPathsForSelectedItems?.first?.item {
            let selectedItem = self.posts[itemIndex]
            // do here what you need
        }
    }

因此,一种方法是在您正在使用的委托调用或回调中发送单元格。

class SomeViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
var collectionView:UICollectionView!

collectionView(method that dequeues the cell){
      let yourcell = collection view.dequeue(...) as! SomeCell
      yourcell.somecallback = callback

}

 func callback(cell: UICollectionViewCell){
   //To find out which cell it is just

   let indexPath = collection view.indexPathForCell(cell)
  //YOU NOW know which cell this was sent from.

}

}

class SomeCell: UICollectionViewCell{
   var somecallback:((UICollectionViewCell)->())?

   func didPress(sender: UIButton){
        somecallback(self)
   }
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM