2010-01-31 50 views
2

我有视图A,当用户点击一个按钮时,我弹出视图B.当用户解散视图B,我们返回视图AI想刷新视图A上的标签,但是有一个事件,我可以用来检测我们已经返回到视图B?我知道ViewDidLoad不会再次触发。如何检测一个SubView已关闭?

回答

2

我很困惑你的问题的意见,但你可以看看NSNotificationCenter

在这种情况下,你会当用户关闭浏览B.发布的NSNotification事件

视图A和B可与通知中心侦听这种解职申报登记,调用一个选择器(方法)时,此听到通知。

在此方法中,您可能会更新标签的状态或执行涉及更新应用程序状态的任何其他操作。

同样,您可能会在弹出视图B时发布通知,并让其他类注册该通知类型。

有关NSNotificationCenter的更多信息位于Apple's documentation site

+0

有趣,谢谢!对于混淆的道歉,我仍然习惯适当的术语。 – 2010-01-31 21:01:42

1

这听起来像你可能指的是UIViewControllers,而不是UIViews,是否正确?在这种情况下,您可以使用-viewWillDisappear:(BOOL)动画和-viewDidDisappear:(BOOL)动画来确定您的viewController何时将被/正在被解散。这些应该在您的示例中的视图B上实现。如果你想知道什么时候View A再次可见,你可以使用-viewWillAppear:和-viewDidAppear。

+0

是的,UIViewControllers。然而,我发现当视图B被解除时(即this.View.RemoveFromSuperview();),ViewWillAppear和ViewDidAppear不会在视图A上被触发。我通过在两个事件处理程序的View A中放入Console.WriteLine语句来检查这一点,并且它们仅在第一次出现View A时触发。 – 2010-01-31 21:08:37

+0

这是正确的;为了让它们触发,你需要使用UINavigationController(或UITabBarController) – 2010-01-31 21:16:59

+0

因此,我认为唯一的办法就是NSNotificationCenter。那是对的吗?这是否会让View A在View B完成RemoveFromSuperview之后更新自己的标签?我担心View A会得到通知的方式是View A将实例化标签。其中的一个例子是将视图A的视图B的引用传递给视图A,并为View A提供一个属性来访问这样的标签,如果视图B尝试更新它,则标签为空,因为视图A的标签当前未实例化。 – 2010-01-31 23:39:25