在 Swift 中通过多个委托链接 UIButton 点击
Posted
技术标签:
【中文标题】在 Swift 中通过多个委托链接 UIButton 点击【英文标题】:Chaining UIButton click through several delegates in Swift 【发布时间】:2018-05-29 14:59:21 【问题描述】:我有一个布局,其中UITableViewCell
内部存在UICollectionView
,UICollectionViewCell
充满了以编程方式生成的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
除了布局深度之外,一切都很好,在上面的示例中,只有两个级别的“嵌套”,UITableView
与 UITableViewCell
和 ViewController
,所以他们只是将 ViewController
委托传递给 @987654342 @ 并到达ViewController
代码,在我的情况下,还有一层UICollectionView
和UICollectionViewCell
代表已经设置为UITableViewCell
,所以我不能将它重新分配给ViewController
。
我打算做什么,是从UICollectionViewCell
调用父UITableViewCell
代码,这将调用父ViewController
方法,这将是某种链条,可能看起来很难看,但可能会起作用.
视觉上看起来像这样
问题是,会吗?
更新:
委托是通过 Xcode 接口设置的
【问题讨论】:
【参考方案1】:这样的链接确实有效。
UICollectionViewCell
调用UITableViewCell
函数,后者调用ViewController
函数
【讨论】:
您也可以将您的UIViewController
作为参考一直传递到UICollectionViewCell
并直接调用委托代码。
感谢您的回答,遗憾的是我不知道如何使用参考资料,但我会尝试找出答案。
如果您发布用于设置UITableViewCell
委托和UICollectionViewCell
委托的代码,我可能会提供帮助。
我在 xcode 界面的帮助下设置它们,我添加了两个新的屏幕截图显示:)
我怀疑你可以直接将代理从视图控制器拖到集合视图。以上是关于在 Swift 中通过多个委托链接 UIButton 点击的主要内容,如果未能解决你的问题,请参考以下文章