【问题标题】:What is the best way to reload a child tableview contained within a parent VC that is being fed fresh data?重新加载包含在父 VC 中的子表视图的最佳方法是什么?
【发布时间】:2015-07-13 20:18:38
【问题描述】:

我这几天一直在研究父/子视图委托的概念,目前了解如何将数据从父级传递给子级。但是,现在,我想要父(主 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
    }
}

来自孩子:

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.
}

我认为我的麻烦在于我在 prepareforsegue 中声明了子委托,所以这是直截了当的,但现在我想要反向委托。如何设置它以便我可以使用父 VC 的子方法?

【问题讨论】:

    标签: swift uitableview delegates


    【解决方案1】:

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

    这种模式称为模型-视图-控制器,或 MVC,是您应该理解和遵循的一个非常基本的概念。苹果解释它pretty well

    一般来说,要将数据从控制器发送到细节控制器,请使用prepareForSegue 设置属性等。要与父控制器通信,您使用委托协议,但通常在细节控制器时调用这些协议完成了它的工作,只是将结果报告给父级。

    如果您想使用新数据更新详细信息 VC(不关闭它并且父项不可见),您不应将更新它的逻辑放入父项中。相反,请使用上面建议的结构。

    【讨论】:

    • 我只想能够刷新子 VC 中的表,我可以在父导航控制器上控制它。因此,我只想能够委托一个简单的方法,该方法可以在父级的 VC 类上激活。我没有将孩子的数据提供给父母。事实上,恰恰相反。
    • 请阅读有关 MVC 的链接文档。你会发现你不需要你描述的东西。不过,我会在我的回答中添加一些关于控制器之间如何通信的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2013-02-19
    相关资源
    最近更新 更多