【问题标题】:Setting the delegate when destination is not UIViewController当目的地不是 UIViewController 时设置委托
【发布时间】:2016-05-24 03:01:24
【问题描述】:

我一直在阅读有关 stackover 流程​​和互联网的信息。 这可能是我有限的知识,我无法找到解决此问题的方法。 以下是我的故事板设置。

为了便于理解,我们称它们为 firstVC secondPageVC 和 thirdTableVC 我基本上在容器视图中显示 pageViewController,其中页面视图控制器又具有 tableView。 我在故事板中的第一个场景有通过互联网获取数据的方法。我需要以填充我的表格视图的方式传递这些数据。

通过我的研究和试验,我发现了。 FirstVC 中的 PrepareForSegue 立即被调用,因为 containerView 需要填写内容,即 pageViewController。一旦 secondPageVC 加载它就需要找到它的启动视图控制器。只要 secondPageVC 加载,它就会尝试加载 thirdTableVC。

我在 firstVC 中编写了一个协议,以便在数据更新时传递数据。 我很困惑,哪个视图控制器应该委托或符合这个协议。 我正在尝试使 secondPageVC 将此协议作为其下一个 VC,其中控制器正在通过和第一个逻辑选择。 但是如果我不使用prepareForSegue,如何设置委托。 我无法使用 prepareForSegue,因为destinationViewController 必须是 UIViewController。

希望对这个问题有一些指导。 如果需要对问题进行更多说明,请发表评论。

更新:感谢回复的人。他们的想法让我产生了怀疑。我正在尝试做的事情。这是一个很好的解决方案。作为一个有通知的同事建议。这绝对可以是另一种方法。

【问题讨论】:

  • 我不明白你说的不能使用 prepareForSegue 是什么意思,但这可能不是协议的最佳情况。您的顶视图控制器可以通过遍历视图控制器层次结构来找到表视图。 Vc1 有一个对容器的引用,该容器引用了对 tableview 的引用的页面视图,或者您可以在第一个 preparwForSegue 中设置委托属性并在下一个中传递它,尽管这有点难看。我可能只是使用 NSNotification 来通知 tableview 新数据

标签: ios uistoryboardsegue uicontainerview


【解决方案1】:

当您考虑委托时,您需要知道哪些对象需要更新。当某些事情发生变化时需要更新的东西应该是委托。无论要做什么更新都应该有委托属性。

在这种特定情况下,由于您的 firstVC 将进行更新,因此它应该是具有委托属性的对象。

您应该可以毫无问题地使用prepareForSegue。是的,destinationViewController 将是 UIViewController 类型,但您知道,只要 segue 是您正在考虑的 segue,它将是您的视图控制器的类型。您可以简单地将destinationViewController 转换为正确的类型,然后设置委托属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多