如何在外侧 UIButton Click 上获取 CollectionViewCell indexPath

Posted

技术标签:

【中文标题】如何在外侧 UIButton Click 上获取 CollectionViewCell indexPath【英文标题】:How to get CollectionViewCell indexPath on Out-sided UIButton Click 【发布时间】:2019-07-09 07:07:24 【问题描述】:

如何在单击按钮时获取collectionViewCellindexPath 并且按钮位于collectionviewCell 的外侧。我正在尝试使用senderSuperview。但它不起作用。

@IBAction func btnCancel(_ sender: Any) 
    if let cell = (sender as AnyObject).superview??.superview?.superview?.superview?.superview?.superview as? ImageShowinPopUpCell 
        let indexPath = collectionview.indexPath(for: cell)
        deleteDublicateImage(id: isNilValue(assignValue: dbImageDataModel![(indexPath?.row)!].id))
        collectionview.reloadData()
        if dbImageDataModel.count == 0
        
            dismiss(animated: true, completion: nil)
        
    

【问题讨论】:

在创建单元格时给 UIButton 一个单元格索引 path.row 的标签,点击时检查标签来判断集合视图单元格索引路径。 将 Indexpath.row 分配给 Button.Tag,然后将该发件人用作 indexpath 你应该学会清楚地问问题。你问的和你接受的答案是完全不同的。 【参考方案1】:
import UIKit

class ViewController: UIViewController ,UICollectionViewDelegate&UICollectionViewDataSource&UICollectionViewDelegateFlowLayout

    @IBOutlet weak var collectionView: UICollectionView!

    var currentIndexPath:IndexPath!
    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        collectionView.delegate = self
        collectionView.dataSource = self

    

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 10
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        cell.backgroundColor = indexPath.row % 2 == 1 ? .blue : .red
        return cell
    
    func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) 
        currentIndexPath = indexPath
    

    @IBAction func indexPathAction(_ sender: UIButton) 
        print("Current IndexPath",currentIndexPath)
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
        return collectionView.bounds.size
    



【讨论】:

你能举个例子吗 您还应该提供这些方法的实现,或者一些链接,以便 OP 可以查看示例代码 你不需要修改你的答案。比别人的好。现在问题解决了。 -->(***.com/a/44655395/9697632)【参考方案2】:

使用按钮创建自定义单元格,以编程方式提供按钮操作,为按钮和 superView 提供标记值,如下所示。 实现按钮动作,可以得到如下索引。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
cell.button.superview.tag = indexPath.section
cell.button.tag = indexPath.row
cell.button.addTarget(self, action: #selector(self.buttonAction), for: .touchUpInside)
return cell


func buttonAction(_ sender:UIButton) 
let indexPath = IndexPath(row: sender.tag, section: sender.superview!.tag)

【讨论】:

【参考方案3】:

试试这个 你像这样在 cellForItemAt indexPath 中设置你的单元格按钮

cell.btnCancel.tag = indexPath.row
cell.btnCancel.addTarget(self, action:#selector(btnCancel), for:.touchUpInside)

//And catch your value like this
@objc func btnCancel(sender: UIButton)

    let index = [sender.tag] as IndexPath 
    let dict = self.yourarray[sender.tag] as! NSDictionary
  

【讨论】:

【参考方案4】:

您可以将标签分配给按钮并在按钮的操作中从标签中检索索引路径。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        cell.button.tag = indexPath.row
cell.button.addTarget(self, action: #selector(buttonTapped(sender:)), for: UIControl.Event.touchUpInside)
        return cell
    


@objc func buttonTapped(sender:UIButton)
        let indexPath = Indexpath(row:sender.tag , section: 0)
        let cell = collectionView.cellForItem(at:indexPath)
    

希望这会有所帮助!

【讨论】:

以上是关于如何在外侧 UIButton Click 上获取 CollectionViewCell indexPath的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableView 内的 UIButton 点击​​上传递一个 int 值

如何在自动布局视图中获取 UIButton 位置

按下时如何获取 UIButton 的标题

ngui uibutton click事件可不可以传递参数

如何获取 UITableView 单元格中的 UIButton 的绝对 x,y

如何通过让子视图 UIButton 获取新闻事件?