在UINavigationController中创建UIViewControllers之间的父/子关系?

时间:2017-09-02 15:29:33

标签: ios uinavigationcontroller parent-child

我有点不确定我们应该/必须在UIViewController个对象之间建立父子关系的时间和原因。考虑像Twitter这样的应用程序,带有4个部分的标签栏。假设每个部分根UIViewController(在4个中)是父容器的子节点,该节中的每个UIViewController都是其节视图控制器的子节点。这很有道理。

但是在Twitter中,例如,每个部分可能都有自己的UINavigationController,因此也有自己的独立导航堆栈。因此,可能存在这样的场景:用户在两个单独的部分中同时查看相同的推文。在这些情况下,是否有两个独立的孩子与两个不同的父母一起推文?

苹果:

  

UINavigationController对象支持通过a导航   分层数据集。导航界面显示一个子视图   控制器一次。

这是否意味着UINavigationController在将视图控制器推入其堆栈时创建自己的父子关系,还是应该在推送新的视图控制器时手动完成?并且,在Twitter示例中,考虑到可能的重叠,在UINavigationController堆栈中建立父子关系有多大必要?

如果有人能指出我关于iOS中亲子关系的文章/视频/等等,他们的意义,陷阱,丢失和不做,我真的很感激,因为我可以&# 39;找不到自己。

1 个答案:

答案 0 :(得分:1)

  

"在那些情况下,是两个独立的孩子到两个孩子   不同的父母?"。

这取决于您的意思" 推文"。 "的资料Tweet "可以是同一个对象,具有相同可视内容的两个不同对象。两者都是可能的,并且没有"最佳实践",这完全取决于您的用例以及您想要实现的目标。

如果屏幕上显示一个对象,在UITableView内(如在Twitter应用程序中),则不会使UITableView或UIViewController成为对象" parent"。

对于Twitter应用程序,(我不是应用程序的用户),我猜它是同一个对象,在两个不同的地方展示。

这怎么可能? Core Data < - 这实际上是您解决问题的方法。

  

这是否意味着UINavigationController创建了自己的   将视图控制器推送到其上时的父子关系   堆栈

是 -

  

viewController参数中的对象成为导航堆栈上的顶视图控制器。推送视图控制器会使其视图嵌入导航界面中。如果动画参数为YES,则将视图设置为动画到位;否则,视图只显示在其最终位置。   除了在堆栈顶部显示与新视图控制器关联的视图外,此方法还相应地更新导航栏和工具栏。有关如何更新导航栏的信息,请参阅更新导航栏。

引自:Apple documentations

  

或者应该在新的视图控制器

时手动完成      
    

推?

  

没有

  

而且,在Twitter的例子中,有一个必要的   给定的UINavigationController堆栈中的父子关系   可能重叠?

阅读MVC structure,并停止将UIViewControllers-Navigationcontrollers与要在UI中显示的对象和内容混合。我认为您的问题是您没有掌握how object oriented language works,或至少如何在iOS中实现它。

编辑: 更新对象,还应该在每个UIViewController中更新它在应用程序中的显示位置(正如我从你想要实现的内容中理解的那样)。这是CoreData和NSFetchedResultsController进入图片的地方。

  

此外,获取结果控制器:可选择监控更改   到关联的托管对象上下文中的对象,并报告   将结果集更改为其委托(请参阅Controller的   代表)。

如果你需要在没有NSFetchedResultsController的帮助下处理tutorials,还有很多this manually,也可以这样做。只需搜索,Google就会提供。