重新加载包含在正在提供新数据的父VC中的子表视图的最佳方法是什么?

时间:2015-07-13 20:18:38

标签: swift uitableview delegates

我几天来一直在使用父/子视图委派的概念,目前了解如何将数据从父级提供给子级。但是,现在,我希望父(主VC)中的按钮重新加载子VC中显示的数据。

我试图委托在子VC级别中激活但在父级导航控制器中激活的方法。因此,当我按下按钮时,执行子VC中的委托方法;在我的情况下,该方法将是重载表。在尝试建立这种简单的委托关系时,为什么会出现这么多错误?

我的父/容器视图当前正在将一个方法委托给孩子,所以我从子设置 - >家长。但我想从父母那里设置 - >儿童。我差不多:

struct Constants {
    static let embedSegue = "containerToCollectionView"
}


class ContainerViewController: UIViewController, CollectionViewControllerDelegate {

func giveMeData(collectionViewController: CollectionViewController) {
    println("This data will be passed")
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == Constants.embedSegue {
        let childViewController = segue.destinationViewController as! CollectionViewController
        childViewController.delegate = self
    }
}

FROM CHILD:

protocol CollectionViewControllerDelegate {
    func giveMeData(collectionViewController: CollectionViewController)
}

class CollectionViewController: UIViewController {

var delegate:CollectionViewControllerDelegate?

override func viewDidLoad() {
    super.viewDidLoad()


    self.delegate?.giveMeData(self)

    // Do any additional setup after loading the view.
}

我认为我的麻烦在于我在准备工作中宣布儿童代表,所以这很直接,但现在我想要反向授权。如何设置它以便我可以使用父VC中的子方法?

1 个答案:

答案 0 :(得分:0)

子视图控制器没有为其他控制器提供数据的业务。它实际上甚至不应该有任何数据提取逻辑,如此通用它也被其他控制器使用。您应该将数据方法重构为新类。

此模式称为模型 - 视图 - 控制器,或MVC,是您应该理解和遵循的非常基本的概念。 Apple解释说pretty well

通常,要将数据从控制器发送到详细控制器,请使用prepareForSegue设置属性等。要与父控制器通信,请使用委托协议,但通常在调用时调用这些协议。细节控制器已完成其工作,只需将结果报告给父级。

如果要使用新数据更新详细信息VC(不解除它并且父项不可见),则不应将逻辑更新为父项。相反,请使用上面建议的结构。