在 Swift 中通过多个委托链接 UIButton 点击

Posted

技术标签:

【中文标题】在 Swift 中通过多个委托链接 UIButton 点击【英文标题】:Chaining UIButton click through several delegates in Swift 【发布时间】:2018-05-29 14:59:21 【问题描述】:

我有一个布局,其中UITableViewCell 内部存在UICollectionViewUICollectionViewCell 充满了以编程方式生成的UIButton,视觉上看起来像这样

现在我需要在我的 ViewController 中调用一个方法,当我按下UICollectionViewCell 中的一个按钮时(在我的示例中是AnswerOptionCell)。我找到了几个思路基本相同的解决方案,通过委托访问父代码:

how to call presentViewController from within a UICollectionViewCell & Access a UICollectionView's parent UIViewController

这是@alexburtnik 代码,以防链接被破坏

// UITableViewCell

protocol CustomCellDelegate: class 
    func sharePressed(cell: MyCell)


class CustomCell: UITableViewCell 
    var delegate: CustomCellDelegate?

    func didTapShare(sender: UIButton) 
        delegate?.sharePressed(cell: self)
    


// ViewController

class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

    @IBOutlet weak var tableView: UITableView!

    //...

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! CustomCell
        cell.delegate = self
        return cell
    


extension TableViewController: CustomCellDelegate 
    func sharePressed(cell: CustomCell) 
        guard let index = tableView.indexPath(for: cell)?.row else  return 
        //fetch the dataSource object using index
    

除了布局深度之外,一切都很好,在上面的示例中,只有两个级别的“嵌套”,UITableViewUITableViewCellViewController,所以他们只是将 ViewController 委托传递给 @987654342 @ 并到达ViewController 代码,在我的情况下,还有一层UICollectionViewUICollectionViewCell 代表已经设置为UITableViewCell,所以我不能将它重新分配给ViewController

我打算做什么,是从UICollectionViewCell调用父UITableViewCell代码,这将调用父ViewController方法,这将是某种链条,可能看起来很难看,但可能会起作用.

视觉上看起来像这样

问题是,会吗?

更新:

委托是通过 Xcode 接口设置的

【问题讨论】:

【参考方案1】:

这样的链接确实有效

UICollectionViewCell调用UITableViewCell函数,后者调用ViewController函数

【讨论】:

您也可以将您的UIViewController 作为参考一直传递到UICollectionViewCell 并直接调用委托代码。 感谢您的回答,遗憾的是我不知道如何使用参考资料,但我会尝试找出答案。 如果您发布用于设置UITableViewCell 委托和UICollectionViewCell 委托的代码,我可能会提供帮助。 我在 xcode 界面的帮助下设置它们,我添加了两个新的屏幕截图显示:) 我怀疑你可以直接将代理从视图控制器拖到集合视图。

以上是关于在 Swift 中通过多个委托链接 UIButton 点击的主要内容,如果未能解决你的问题,请参考以下文章

C#中通过委托来调用对象方法的基本过程

在 Swift 中通过计数从多维数组中找到最大的数组

2.C#中通过委托Func消除重复代码

在 C# 中通过引用传递对象和对象列表

如何在反应js中通过悬停切换多个下拉列表

在 Swift 2 中通过“prepareForSegue”传递数据