繁体   English   中英

检测WatchKit应用程序中的活动接口控制器?

[英]Detect active interface controller in WatchKit app?

我已经构建了一个具有分层结构的WatchKit应用程序,可以接收可操作的推送通知。 当通知进入时,操作是推送一个特定的接口控制器,以便用户可以立即查看它而无需向下钻取菜单。

Apple关于handleActionWithIdentifier:ForRemoteNotification:文档 handleActionWithIdentifier:ForRemoteNotification:声明此方法仅在初始接口控制器上调用,因此我在初始接口控制器中处理远程通知的代码如下所示:

override func handleActionWithIdentifier(identifier: String?, forRemoteNotification remoteNotification: [NSObject : AnyObject]) {
    if let notificationIdentifier = identifier {
        if notificationIdentifier == "myActionIdentifier" {
            pushControllerWithName("myActionController", context: nil)
        }
    }
}

但是,问题是,如果用户之前已经在查看此myActionController,然后暂停了我的应用程序,然后稍后会收到此通知并执行操作,则应用程序会将此同样的myActionController再次推送到堆栈中。 然后,当用户点击“后退”按钮时,他们只会弹出前一个myActionController,它看起来是一样的。 此问题也会堆叠 - 如果用户收到此类型的多个通知并对所有这些通知执行操作,则myActionController将开始堆叠。

我想在handleActionWithIdentifier:forRemoteNotification:解决这个问题handleActionWithIdentifier:forRemoteNotification:检查当前活动接口控制器是什么,如果它已经是myActionController,不要做任何事情(因为它会重新加载一次willActivate:无论如何willActivate:调用它)。 我知道这有可能(有时)在iOS中,例如在UINavigationController上,但我不知道它是否可以在WatchKit中使用。 有没有人有任何想法?

我在自己的WatchKit应用程序中几乎完全相同的情况,我通过跟踪当前正在呈现的视图控制器来处理它。 在简单版本中,您可以跟踪您呈现的最后一个视图控制器的名称,并在呈现控制器的willActivate方法中清除它(因为它将在重新显示呈现控制器时调用)。 如果您在出示某些内容时收到了通知,则可以先决定是否需要解除/弹出控制器。

它可能比您想要/需要的更多,但我编写了一个JBInterfaceController子类,它包含了很多这个功能: https//github.com/mikeswanson/JBInterfaceController

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM