【问题标题】:How to detect a SubView has closed?如何检测 SubView 已关闭?
【发布时间】:2010-01-31 19:59:01
【问题描述】:

我有视图 A,当用户单击按钮时,我会弹出视图 B。当用户关闭视图 B,我们返回视图 A 我想刷新视图 A 上的标签,但是否有我可以用来检测我们已经返回到视图B吗?我知道 ViewDidLoad 不会再次触发。

【问题讨论】:

    标签: iphone xamarin.ios subview


    【解决方案1】:

    我对您问题中的观点感到困惑,但您可以查看NSNotificationCenter

    在这种情况下,您将在用户关闭视图 B 时发布 NSNotification 事件。

    视图 A 和视图 B 可以向通知中心注册以侦听此解雇通知,在听到此通知时调用选择器(方法)。

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

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

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

    【讨论】:

    • 有趣,谢谢!很抱歉造成混乱,我还在习惯适当的术语。
    【解决方案2】:

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

    【讨论】:

    • 是的,UIViewControllers。但是,我发现 ViewWillAppear 和 ViewDidAppear 在 View B 被关闭时不会在 View A 上触发(即 this.View.RemoveFromSuperview(); )。我通过在我的视图 A 中为两个事件处理程序放置 Console.WriteLine 语句来检查这一点,并且它们仅在视图 A 第一次出现时触发。
    • 没错;要让这些触发,您需要使用 UINavigationController(或 UITabBarController)
    • 那么我认为唯一的方法是 NSNotificationCenter。那是对的吗?在视图 B 完成 RemoveFromSuperview 之后,这实际上是否允许视图 A 更新其自身的标签?我担心视图 A 收到通知的方式是视图 A 实例化标签时。这方面的一个示例是传递对视图 A 的视图 B 的引用,并为视图 A 提供访问此类标签的属性,如果视图 B 尝试更新它,则标签为 null,因为当前未实例化视图 A 的标签。
    • 附加问题,您如何使用 UINavigationController 做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多