当返回父视图控制器时,Manuel segue 'Show' 不调用 ViedDidload?

Posted

技术标签:

【中文标题】当返回父视图控制器时,Manuel segue \'Show\' 不调用 ViedDidload?【英文标题】:Manuel segue 'Show' does not call ViedDidload when returning to parent viewController?当返回父视图控制器时,Manuel segue 'Show' 不调用 ViedDidload? 【发布时间】:2016-08-15 13:06:08 【问题描述】:

我有一个包含 UITableViewController 的 viewController。这个 UITableViewController 由一个数组填充。当用户按下填充的单元格时,他们将 segue 设置为“Manuel Segue:Show”,这将创建一个后退按钮 UINavigation 栏项目。在这个 viewController 中,用户可以将 Items 添加到填充父 UITableViewController 的数组中。问题是,当我使用 UINavigationbarItem 后退时,它不会在 UITableViewController 上调用 viewDidload,因此不会更新 UIViewTableCells。我必须关闭应用程序才能使其调用 viewDidload... 从 Manuel segue 节目返回时,如何让它调用 ViewDidload?感谢所有帮助。

【问题讨论】:

viewWillAppear 将被调用。从那里触发表重新加载。 应用启动时是否与ViewDidLoad冲突? viewWillAppear 将在viewDidLoad 第一次之后被调用。如果您想避免第一次调用reload,您可以在viewDidLoad 中设置一个属性,例如viewJustLoaded = true,并在这种情况下跳过viewWillAppear 中的reload。不要忘记将属性设置为 false。 有效!非常感谢。 【参考方案1】:

当上面显示另一个视图控制器时,推送视图控制器不会被卸载。由于 viewDidLoad: 在视图生命周期中只被调用一次,所以当解开 segue 时不会调用它。

viewWillAppear:viewDidAppear: 中更新您的 tableview 会导致在显示此视图时调用它。

viewWillAppear 如果您不想在不需要异步加载数据时向用户显示重新加载的表,可能会更好。


在此处阅读有关 ios 视图控制器生命周期的更多信息: https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson4.html#//apple_ref/doc/uid/TP40015214-CH6-SW3

【讨论】:

以上是关于当返回父视图控制器时,Manuel segue 'Show' 不调用 ViedDidload?的主要内容,如果未能解决你的问题,请参考以下文章

在父视图控制器上注册一个 Segue 以在子视图控制器上使用

(Swift)当多个视图控制器导致相同的视图时展开 segue?

当 segue 即将执行到另一个视图控制器时,prepareForSegue 是不是会通知视图控制器?

将 segue 添加到拆分视图控制器

如何执行从视图容器到另一个外部视图的转场?

当应用程序关闭(然后启动)时返回“主”视图控制器