许多不同视图控制器中的单元格

Posted

技术标签:

【中文标题】许多不同视图控制器中的单元格【英文标题】:Cell in many different ViewControllers 【发布时间】:2018-02-25 22:35:02 【问题描述】:

我有一个单元格,我在许多不同的 vc 中使用,因为我的应用程序分为不同的类别,但都使用相同的单元格。

现在我有一个按钮,它应该触发事件以通过 whastapp 或 facebook 等其他应用程序共享它。 问题在于,根据您所在的类别,您有一个不同的视图控制器来显示该功能。 我可以让它在一个单元格中使用一个但不能使用 10 个不同的 vc。

我使用了一个扩展来获取 parentviewController

extension UIView 
var parentViewController: HomeViewController? 
    var parentResponder: UIResponder? = self
    while parentResponder != nil 
        parentResponder = parentResponder!.next
        if parentResponder is UIViewController 
            return parentResponder as! HomeViewController!
        
    
    return nil
 

这显然只适用于 Home vc。

我该如何解决这个问题?

【问题讨论】:

你应该从你的 UIViewController 控制你的 UIViews,而不是相反。这是一个非常糟糕的 hack,你真的不应该使用它。 请告诉我如何 我必须了解您的架构才能提供帮助,抱歉 我可以在 cellForRow 分配它吗? cell.parentVc = HomeviewController()。 ? 您的单元格应该有一个单一的职责,即在屏幕上显示其信息。它不应该知道它的父级。 【参考方案1】:

您可以使用协议来处理视图控制器中的按钮操作:

protocol ShareEventDelegate: class 
    func didShareButtonSelected()

在您的自定义单元格中:

class CustomCell: UITableViewCell 
    weak var shareDelegate: ShareEventDelegate?

    func yourButtonAction()  
       shareDelegate.didShareButtonSelected?()
    

然后让你的 ViewControllers 符合 ShareEventDelegate,例如:

extension HomeViewController: ShareEventDelegate 
    func didShareButtonSelected() 
        // handle your action here
    

在 cellForRow 中:

cell.shareDelegate = self

【讨论】:

首先谢谢,我现在通过发布通知让它工作了:)

以上是关于许多不同视图控制器中的单元格的主要内容,如果未能解决你的问题,请参考以下文章

ios中集合视图中的不同单元格大小

如何根据集合视图中的单元格选择来控制表格视图的内容?

使用单元格中的按钮转到详细视图控制器

CollectionView 单元格转场

在 iOS 表格视图的不同部分使用不同的单元格类型

UITableViewCell 子视图显示在单元格之外